问题描述
假设我在带有 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';
然后执行生成的查询