基于另一个表的第一个id使用DEFAULT创建



我希望这是一个简单的问题,但遗憾的是,我无法通过谷歌搜索或RTF Ming找到答案。

我想创建一个具有默认值的列,该默认值基于另一个表的第一个id。

类似的事情,不幸的是,它给了我"错误:不能在默认表达式中使用子查询"

ALTER TABLE foobar 
      ADD COLUMN foo INTEGER DEFAULT (SELECT id FROM blubb LIMIT 1); 

问题是,我不能简单地假设"blubb"从0或1开始,我想稍后对其进行CONSTRAINT。

简单答案:使用一个函数。

示例:

  CREATE TABLE foo (id serial primary key);
  CREATE OR REPLACE FUNCTION max_foo() RETURNS int LANGUAGE SQL AS
  $$ SELECT max(id) FROM foo; $$;
  CREATE TABLE bar(id int not null default max_foo());

最新更新