在PostgreSQL中重命名具有特定列名的所有表中的所有列?

时间:2016-08-23 07:59:17

标签: sql postgresql postgresql-9.2

有没有办法可以在PostgreSQL数据库的所有模式中将所有名为'location'的列名重命名为'location_name'?

我是SQL的新手,我知道有一个ALTER TABLE命令,但不知道是否有可能以某种方式遍历所有表?

4 个答案:

答案 0 :(得分:4)

您需要使用动态SQL,使用匿名PL / pgSQL块以自动方式执行此操作:

do
$$
declare
  l_rec record;
begin
  for l_rec in (select table_schema, table_name, column_name 
                from information_schema.columns 
                where table_schema = 'public' 
                  and column_name = 'location') loop
     execute format ('alter table %I.%I rename column %I to %I_name', l_rec.table_schema, l_rec.table_name, l_rec.column_name, l_rec.column_name);
  end loop;
end;
$$

如果您有多个架构或者您的表不在public架构中,请将条件where table_schema = 'public'替换为适当的限制。

答案 1 :(得分:2)

我认为你得到的最接近的是运行这样的东西:

\gexec

如果你在psql中运行它,你可以用public float fadeTime = 0.1f; public Text example; void FadeOut() { example.color.a -= fadeTime; } 跟随它,它应该可以工作。

答案 2 :(得分:2)

如果您具有超级用户权限,则可以在系统目录中的一次扫描中进行更改:

UPDATE pg_attribute
SET attname = 'location_name'
WHERE attname = 'location';

答案 3 :(得分:1)

您可以使用

获取数据库中的所有location
SELECT * FROM information_schema.columns WHERE column_name = 'location';

并且可能使用一些编程语言来执行所有重命名查询。几乎每个数据库管理系统都有information_schema个表(尽管它们有时被称为/结构不同)。