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

时间:2014-08-19 08:27:25

标签: sql postgresql

我想做以下

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

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

2 个答案:

答案 0 :(得分:10)

试试这个

  1. 创建一个函数,以id作为arg从users表中获取email

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

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

  3. SQL FIDDLE(DEMO)

答案 1 :(得分:3)

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

您可以查看PostgreSQL Trigger Documentation here