将PostrgreSQL表列中的默认值设置为查询中的值

Mah*_*kic 7 sql postgresql

我想做以下事情

ALTER TABLE runs ADD COLUMN userId bigint NOT NULL DEFAULT (SELECT id FROM users WHERE email = 'admin@example.com');
Run Code Online (Sandbox Code Playgroud)

但它一直给我语法错误.我怎么能这样做?任何帮助都非常感谢.;)

Viv*_* S. 14

试试这个

  1. 创建一个函数来获取id从表中usersemail作为ARG.

    CREATE OR REPLACE FUNCTION id_in_users(iemail varchar) RETURNS int LANGUAGE SQL AS
    $$ SELECT id FROM users WHERE email = iemail; $$;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 并改变表格

    ALTER TABLE runs ADD COLUMN userId bigint NOT NULL DEFAULT     
    id_in_users('admin@example.com');
    
    Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE(DEMO)

  • +1我很好奇,看看这是否有效,所以我创建了一个SQL小提琴并试一试,看起来它可以正常工作.随意在答案中包含小提琴.http://www.sqlfiddle.com/#!15/fcc39/9 (3认同)

JCa*_*nes 6

你不能在 上这样做DEFAULT。但是,您可以在插入之前使用触发器检查是否有值NULL

您可以在此处查看 PostgreSQL 触发器文档