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;
$$