Postgres:强制在模式中有一列

Postgres: Force to have a column in schema

是否可以拦截 CREATE table 语句并确保给定列 column1 存在或 return 异常?

有没有人有例子?

CREATE TABLE 事件触发器在 table 创建后触发。您可以获取创建的 table 的 OID,并在系统目录 pg_attribute 中搜索其列。示例:

create or replace function create_table_event() 
returns event_trigger language plpgsql as $$
declare 
    r record;
begin
    for r in 
        select * 
        from pg_event_trigger_ddl_commands() 
        where command_tag = 'CREATE TABLE'
    loop
        if not exists(
            select from pg_attribute
            where attrelid = r.objid
            and attname = 'column1') 
        then
            raise exception 'cannot create table %; table must have "column1" column', r.object_identity;
        end if;
    end loop;
end
$$;

create event trigger create_table_event
    on ddl_command_end when tag in ('CREATE TABLE')
    execute procedure create_table_event();

在文档中阅读更多内容: