在 postgres 中将表中的所有列名更改为小写

问题描述

假设我在带有 DDL 的 postgres 数据库中有一个表,例如:

    CREATE TABLE personnel_data 
    (
    ID serial primary key,NAME varchar(50),EMAIL_ADDRESS varchar(20),last_updated timestamp
    );

现在我希望运行一个查询,该查询将更改表并将所有列名转换为完全小写。我的预感告诉我我需要在单个列级别做这样的事情,但这显然很麻烦:

ALTER TABLE personnel_data
RENAME COLUMN ID to id;

那么,我的问题是如何创建一个 ALTER 语句来在一个查询中将所有列名更改为小写(使用 lower() ??)?

谢谢!

解决方法

您必须使用下面的查询动态创建命令:

SELECT 
CONCAT('ALTER TABLE ',table_schema,'.',table_name,' RENAME COLUMN ',column_name,' TO ',LOWER(column_name)),*
FROM information_schema.columns 
WHERE table_name = 'your_table'
AND table_schema = 'your_schema_name';

然后执行生成的查询