有没有办法可以在PostgreSQL数据库的所有模式中将所有名为'location'的列名重命名为'location_name'?
我是SQL的新手,我知道有一个ALTER TABLE命令,但不知道是否有可能以某种方式遍历所有表?
答案 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
个表(尽管它们有时被称为/结构不同)。