UPDATE emp SET subordinate_of = COALESCE(subordinate_of, DEFAULT), other = 'somethingelse' WHERE conditionhere
But it cannot yet be done in Postgres. So we will just obtain the column's default value from information_schema.
create function default_of(_table_name text, _column_name text) returns text as $$ begin return default_of(_table_name, _column_name, CURRENT_SCHEMA); end; $$ language 'plpgsql'; create or replace function default_of(_table_name text, _column_name text, _schema_name text) returns text as $$ declare r record; s text; begin s = 'SELECT ' || coalesce( (select column_default from information_schema.columns where table_schema = _schema_name and table_name = _table_name and column_name = _column_name) ,'NULL') || ' as v'; EXECUTE s into r; return r.v; end; $$ language 'plpgsql';
To use:
UPDATE emp SET subordinate_of = COALESCE( subordinate_of, default_of('emp','subordinate_of') ), other = 'somethingelse' WHERE conditionshere
No comments:
Post a Comment