PostgreSQL增加列长度

时间:2014-08-13 08:47:53

标签: postgresql types dynamic-sql ddl

示例我的表格来自A - Z,但只有

    table "A" and table "J"

有一个

    column clm varchar(10). 

然后我意识到我需要clm大小为50(假设我不知道AJ有一列clm)。

PG中有脚本/查询可以做这件事吗?

3 个答案:

答案 0 :(得分:3)

只需使用textvarchar,而不是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;
$$;