Вы получаете значения, потому что это единственное, что может дать ссылка на точку данных. Чтобы получить то, что вы ищете, вам нужен Dynami c SQL. Вы пытаетесь взять значение данных и создать столбец с этим значением (с префиксом «p»). Это действительно очень плохой план . Поскольку у вас нет возможности узнать значение customer_column_name до того, как ваш триггер также должен изменить таблицу. Но если у вас нет очень строгого контроля над этим значением, вы можете получить очень странные имена столбцов.
Ниже показан один из способов выполнения того, что вы просили. Но прежде чем сделать это, я предлагаю вам посмотреть здесь , чтобы увидеть, что может произойти, и если вы готовы справиться с возможными последствиями, по крайней мере, с его текущими ограничениями (код).
create or replace function really_bad_idea()
returns trigger
language plpgsql
as $$
declare
k_add_column constant text =
'alter table col_extra_val_lookup add column if not exists %I text';
k_update_lookup constant text =
'update col_extra_val_lookup set %I = $1 where customer_id = $2';
column_name character varying(63); -- normal Postgres max length for column name
begin
column_name = 'p'|| NEW.customer_column_id;
execute format(k_add_column, column_name);
execute format(k_update_lookup, column_name) using new.value, new.customer_id;
return new;
end;
$$;
Приятных побочных эффектов .