Условно установите для столбца значение по умолчанию в Postgres - PullRequest
6 голосов
/ 20 апреля 2010

У меня есть таблица PostgreSQL 8.4 с автоинкрементным, но обнуляемым целочисленным столбцом. Я хочу обновить некоторые значения столбца и, если этот столбец равен NULL, установить для него значение по умолчанию (которое будет целым числом, автоматически генерируемым из последовательности), , но Я хочу вернуть его значение либо дело. Поэтому я хочу что-то вроде этого:

UPDATE mytable
SET incident_id = COALESCE(incident_id, DEFAULT), other = 'somethingelse'
WHERE ...
RETURNING incident_id

К сожалению, это не работает - кажется, что DEFAULT является особенным и не может быть частью выражения. Какой лучший способ сделать это?

1 Ответ

4 голосов
/ 20 апреля 2010

используйте это:

update mytable set a = 
    coalesce(incidentid, 
    (
     select column_default::int 
     from information_schema.columns 
     where table_schema = 'public' 
     and table_name = 'mytable' and column_name = 'incidentid')
    )

если ваш incidentid имеет целочисленный тип, поместите приведение типа в column_default

[EDIT]

create or replace function get_default_value(_table_name text,_column_name text) 
returns text
as
$$
declare r record;
s text;
begin

    s = 'SELECT ' || coalesce(

    (select column_default 
    from information_schema.columns 
    where table_schema = 'public' 
    and table_name = _table_name and column_name = _column_name)

    , 'NULL') || ' as v';

    EXECUTE s into r;
    return r.v;
end;
$$
language 'plpgsql';

использовать:

update mytable set a = 
    coalesce(incidentid, get_default_value('mytable','a')::int )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...