根据另一个表的第一个id创建DEFAULT

时间:2013-08-30 09:49:19

标签: sql postgresql

我希望,简单的问题,我遗憾地找不到通过谷歌搜索或RTFMing的答案。

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

这样的东西,遗憾地给了我“错误:不能在默认表达式中使用子查询”

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

问题是,我不能简单地假设'blubb'从0或1开始,我想稍后将CONSTRAINT放在上面。

1 个答案:

答案 0 :(得分:5)

简单回答:使用函数。

示例:

  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());