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

问题描述 投票:0回答:2

我想做以下事情

ALTER TABLE runs ADD COLUMN userId bigint NOT NULL DEFAULT (SELECT id FROM users WHERE email = '[email protected]');

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

sql postgresql
2个回答
35
投票
  1. 创建一个函数,以

    id
    作为参数,从表
    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('[email protected]');
    

SQL FIDDLE(演示)


6
投票

您不能在

DEFAULT
上执行此操作。但是,您可以在插入之前使用触发器检查是否存在
NULL
值。

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

© www.soinside.com 2019 - 2024. All rights reserved.