我有一个表,其中一列存储记录来自的表table OID
。如果必须填写此字段(NOT NULL
),但如果未提供,则可以具有默认值。我想在插入时存储当前的table OID
。
CREATE TABLE t AS(
Source regclass NOT NULL DEFAULT current_table_name()::regclass
);
postgreSQL表中是否有任何函数(current_table_name
)来执行此任务?
答案 0 :(得分:1)
没有这样的功能,但您可以通过三个步骤实现目标:
DEFAULT
的表格。ALTER
表格并设置DEFAULT
。最好使用表OID而不是将表名转换为regclass
,因为后者INSERT
在重命名表后会突然失败。
这是一个DO
块,可以实现:
DO $$DECLARE
reloid oid;
BEGIN
CREATE TABLE t (source regclass NOT NULL);
SELECT t.oid INTO reloid
FROM pg_class t
JOIN pg_namespace n ON t.relnamespace = n.oid
WHERE t.relname = 't' AND n.nspname = current_schema;
EXECUTE 'ALTER TABLE t ALTER source SET DEFAULT ' || reloid;
END;$$;