Postgresql 在postgres中将表列名更改为大写
我正在使用postgres 9.2。 我需要将postgres db中所有表的所有列名更改为大写 有没有办法做到这一点??Postgresql 在postgres中将表列名更改为大写,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我正在使用postgres 9.2。 我需要将postgres db中所有表的所有列名更改为大写 有没有办法做到这一点?? 我是否需要更改postgres中的任何配置?在我解释如何执行此操作之前,我强烈建议不要这样做 在PostgreSQL中,如果表名或列名不带引号,如: SELECT Name FROM MyTable WHERE ID = 10 实际上,它们首先自动折叠为小写,因此上面的查询与以下相同: SELECT name FROM mytable WHERE id = 10 如果要
我是否需要更改postgres中的任何配置?在我解释如何执行此操作之前,我强烈建议不要这样做 在PostgreSQL中,如果表名或列名不带引号,如:
SELECT Name FROM MyTable WHERE ID = 10
实际上,它们首先自动折叠为小写,因此上面的查询与以下相同:
SELECT name FROM mytable WHERE id = 10
如果要将所有名称转换为大写,则此语句将不起作用:
您必须在此查询中对每个名称进行双引号引用才能使其正常工作:
SELECT "NAME" FROM "MYTABLE" WHERE "ID" = 10
另一方面,若您使用标准的PostgreSQL纯小写协议,那个么您可以使用任何大小写组合,只要您不引用任何名称,它就可以工作
现在,如果您仍然坚持转换为大写,可以通过使用将数据库模式转储到文件中来实现
完成后,检查所有语句并基于此转储构造适当的语句-您必须编写一些Perl或Python脚本来完成此操作
或者,您还可以读取和/或构造并执行适当的ALTER TABLE语句。下面的查询创建SQL语句,您可以运行这些语句将表的列名更改为小写。如果要广泛应用,请删除表名检查。有关更多详细信息,请参阅 此查询必须有效
Alter table if exists tablename rename to "TABLENAME"
显然,CREATE TABLE中的双引号列名创建了包含引号字符的列名,但它仍然将所有内容都小写。@weberc2:这完全是错误的。SQLFiddle-proof:是的,看起来我的文本编辑器插入了智能引号。我错了,欢迎来到StackOverflow!请检查并提供必要的详细信息以解决问题
SELECT array_to_string(ARRAY(SELECT 'ALTER TABLE ' || quote_ident(c.table_schema) || '.'
|| quote_ident(c.table_name) || ' RENAME "' || c.column_name || '" TO ' || quote_ident(lower(c.column_name)) || ';'
FROM information_schema.columns As c
WHERE c.table_schema NOT IN('information_schema', 'pg_catalog')
AND c.column_name <> lower(c.column_name)
and table_name = 'your_table_name'
ORDER BY c.table_schema, c.table_name, c.column_name
) ,
E'\r') As ddlsql;
Alter table if exists tablename rename to "TABLENAME"