Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
Sql 在单个查询中重命名混合大小写表_Sql_Postgresql_Ddl - Fatal编程技术网

Sql 在单个查询中重命名混合大小写表

Sql 在单个查询中重命名混合大小写表,sql,postgresql,ddl,Sql,Postgresql,Ddl,例如,在我的PostgreSQL 9.2数据库中,有许多表的名称大小写混合 Tbl\u销售,Tbl\u采购,Tbl\u日志 我想做的是 alter table "Table1" rename to table1 但是如何以一种简单的方式重命名数据库中的所有混合大小写表?这是要使用的查询 更改表名 重命名为新名称 您最好的选择可能是通过查询 然后,您可以针对感兴趣的模式(或者如果您想这样做的话,所有模式都可以,只要它们是用户创建的——您应该避免使用任何pg\uu模式,因为这些模式是由Postg

例如,在我的
PostgreSQL 9.2
数据库中,有许多表的名称大小写混合

Tbl\u销售
Tbl\u采购
Tbl\u日志

我想做的是

 alter table "Table1" rename to table1

但是如何以一种简单的方式重命名数据库中的所有混合大小写表?

这是要使用的查询

更改表名 重命名为新名称


您最好的选择可能是通过查询

然后,您可以针对感兴趣的模式(或者如果您想这样做的话,所有模式都可以,只要它们是用户创建的——您应该避免使用任何
pg\uu
模式,因为这些模式是由Postgres自己管理的),并检查小写名称是否与当前名称相同。如果它们不同,则可以生成重命名表所需的
altertable
语句,然后执行它,确保
COMMIT
您的更改

举个例子

注意我创建的
foo
表是如何列在那里的

我建议按模式列出白名单,比如,
public
和任何其他您想要的。例如,在小提琴中,您不想触摸
pg_目录
information_模式
模式中的任何内容。您还可以按
tableowner
进行筛选,例如,您可能希望避免postgres用户拥有的任何内容


另外,请注意,在创建表时,大小写并不重要。如果表
foo
已经存在,然后我尝试创建
foo
,则会出现错误
error:relation“foo”已经存在。

使用以下选择来获取名称中包含混合大小写的表

 SELECT  table_name ucase,lower(table_name) lcase
 FROM    information_schema.tables 
 where   table_type = 'BASE TABLE' and 
         table_schema = 'public' and 
         table_name ~ E'^[[:upper:]][^[:upper:]]'
PostgreSQL字符串函数和

并使用PL/PGSQL重命名所有大小写混合的表

do
$$
declare 
rw record;
begin
for rw in 
SELECT 'ALTER TABLE  "'||t.ucase||'" RENAME to '||t.lcase||';'  execme from (
SELECT  table_name ucase, lower(table_name) lcase
FROM    information_schema.tables 
where   table_type = 'BASE TABLE' and 
        table_schema = 'public' and 
        table_name ~ E'^[[:upper:]][^[:upper:]]')t
loop
execute rw.execme ;
end loop;
end;
$$