who*_*ows 3 postgresql ddl types dynamic-sql
示例我有一个名为A- 的表Z,但只有
table "A" and table "J"
Run Code Online (Sandbox Code Playgroud)
有一个
column clm varchar(10).
Run Code Online (Sandbox Code Playgroud)
但后来我意识到我需要clm达到 50 码(鉴于我不知道这一点A并且J有一列clm)。
PG 中是否有可以做这件事的脚本/查询?
只需使用textor varchar,而不是varchar(n)。如果您确实需要将列限制为最大长度,请使用CHECK约束。相关回答:
不管怎样,基本的说法是:
ALTER TABLE tbl ALTER clm TYPE varchar(50); -- or rather: text
Run Code Online (Sandbox Code Playgroud)
你不需要一个USING带有显式转换指令的子句,只要有一个隐式的 a 注册,这是varchar(n)-> varchar(n)/的情况text。细节:
基于系统目录的脚本:
DO
$do$
DECLARE
_sql text;
BEGIN
FOR _sql IN
SELECT format('ALTER TABLE %s ALTER %I TYPE varchar(50)'
, attrelid::regclass
, a.attname)
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
JOIN pg_attribute a ON a.attrelid = c.oid
WHERE n.nspname = 'public' -- your schema
AND a.attname = 'clm' -- column name (case sensitive!)
AND a.attnum > 0
AND NOT a.attisdropped
LOOP
RAISE NOTICE '%', _sql; -- debug before you execute
-- EXECUTE _sql;
END LOOP;
END
$do$;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6561 次 |
| 最近记录: |