СОЗДАТЬ с ПО УМОЛЧАНИЮ на основе первого идентификатора другой таблицы

Я надеюсь, что это простой вопрос, на который я, к сожалению, не могу найти ответ с помощью поиска в Google или RTFMing.

Я хочу создать столбец со значением по умолчанию, основанным на первом идентификаторе другой таблицы.

Что-то вроде этого, что, к сожалению, дает мне «ОШИБКА: невозможно использовать подзапрос в выражении по умолчанию»

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

Проблема в том, что я не могу просто предположить, что 'blubb' начинается с 0 или 1, и я хочу наложить на него ОГРАНИЧЕНИЕ позже.


person BastetFurry    schedule 30.08.2013    source источник
comment
LIMIT 1 не означает первый идентификатор. Это означает только 1 строку, любую строку. Пока вы не предоставите пункт ORDER BY.   -  person ypercubeᵀᴹ    schedule 30.08.2013
comment
Вы хотите, чтобы значением по умолчанию было значение blubb.id во время установки таблицы foobar (т. е. когда вы выполняете команду ALTER TABLE) или значение blubb.id при вставке нового значения в foobar?   -  person contradictioned    schedule 30.08.2013
comment
При вставке, пожалуйста.   -  person BastetFurry    schedule 30.08.2013
comment
Такое назначение выполняется в триггере, а не в предложении default. См. триггер вставки Postgresql для установки значения   -  person Daniel Vérité    schedule 30.08.2013
comment
Можете ли вы объяснить, почему вы хотите это сделать? Звучит как довольно странное требование. Возможно, есть лучшее решение вашей фактической проблемы.   -  person a_horse_with_no_name    schedule 09.11.2013


Ответы (1)


Простой ответ: используйте функцию.

Пример:

  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());
person Chris Travers    schedule 09.11.2013