示例我的表格来自A
- Z
,但只有
table "A" and table "J"
有一个
column clm varchar(10).
然后我意识到我需要clm
大小为50(假设我不知道A
和J
有一列clm
)。
PG中有脚本/查询可以做这件事吗?
答案 0 :(得分:3)
只需使用text
或varchar
,而不是varchar(n)
。如果确实需要将列限制为最大长度,请使用CHECK
约束。相关回答:
无论如何,基本陈述是:
ALTER TABLE tbl ALTER clm TYPE varchar(50); -- or rather: text
只要注册了一个隐式转换,USING
- >的情varchar(n)
/ varchar(n)
。详细说明:
基于系统目录的脚本:
text
答案 1 :(得分:1)
创建程序
CREATE OR REPLACE FUNCTION fn_sizeupdate()
RETURNS Void AS
$BODY$
DECLARE
query text;
BEGIN
for query in
select 'alter table '|| table_name ||' alter clm type varchar(50)
USING clm ::varchar(50);'
from information_schema.columns where table_schema = 'public' and
column_name='name';
loop
execute query
End loop;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
答案 2 :(得分:0)
未经验证只是“经过大脑测试”
DO
$$
DECLARE
row record;
BEGIN
FOR row IN SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'clm' AND TABLE_SCHEMA = 'public'
LOOP
EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || 'ALTER COLUMN clm TYPE varchar(50);';
END LOOP;
END;
$$;