Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在postgres中将表列名更改为大写_Postgresql_Postgresql 9.2 - Fatal编程技术网

Postgresql 在postgres中将表列名更改为大写

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 9.2。 我需要将postgres db中所有表的所有列名更改为大写

有没有办法做到这一点??
我是否需要更改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"