【发布时间】:2016-09-19 09:38:45
【问题描述】:
如何在没有数据类型的情况下仅获取默认列值。
我正在创建一个新的枚举类型:
CREATE TYPE t AS ENUM ('a', 'b', 'c');
然后创建一个表为:
create table t1 (c1 t default 'a'::t);
当通过 information_schema 或 pg_* 查询列默认值时,我得到的响应是由值组成的文本,并且它的类型连接到它:
# SELECT column_default::text
FROM information_schema.columns
WHERE (table_schema, table_name, column_name)
= ('public', 't1', 'c1');
column_default
----------------
'a'::t
(1 row)
# SELECT d.adsrc AS default_value
FROM pg_catalog.pg_attribute a
LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid, a.attnum)
= (d.adrelid, d.adnum)
WHERE NOT a.attisdropped
AND a.attnum > 0
AND a.attrelid = 'public.t1'::regclass
AND a.attname = 'c1';
default_value
---------------
'a'::t
(1 row)
我需要它返回 a 而不是 'a'::t,就像我在读取枚举值时得到的一样:
select UNNEST(ENUM_RANGE(NULL::t));
unnest
--------
a
b
c
(3 rows)
我知道我可以修剪/正则表达式,但是有没有一个纯 PostgreSQL 解决方案呢?
【问题讨论】:
标签: postgresql