열의 값을 가져 와서 삽입 된 행의 열 이름과 열 값을 보유하는 테이블에 삽입 할 수 있지만, 나는 필요한 칼럼의 가치를 얻을 수 없었다. 일반적으로 value := NEW.column_name
을 사용할 수는 있지만 각 테이블에는 테이블 이름 자체에있는 고유 한 키 열 이름이 있습니다 (나쁘다는 것을 알고 있습니다). 그러나 이미 원하는 열 이름을 가져 오는 방법이 있습니다. 해당 열의 새로운 가치입니다.Postgres : 트리거에서 동적 열의 값을 얻는 방법
CREATE TABLE prefix_kvp1_suffix AS id SERIAL, kvp1 CHARACTER VARYING;
CREATE TABLE prefix_kvp2_suffix AS id SERIAL, kvp2 CHARACTER VARYING;
INSERT INTO prefix_kvp1_suffix VALUES (1, 'value1');
INSERT INTO prefix_kvp2_suffix VALUES (1, 'value2');
나는
inserted_kvp
테이블 싶습니다
은 다음 가지고 : 나는 테이블에 삽입 그래서
CREATE OR REPLACE FUNCTION trgfn_keyvalue_insert()
RETURNS trigger AS
$BODY$
DECLARE
key_column_value character varying;
key_column_name character varying;
part text;
part_array text[] := array['prefix_','_suffix'];
BEGIN
key_column_name := TG_TABLE_NAME; --parsing the table name to get the desired column name
FOREACH part IN ARRAY part_array LOOP
key_column_name = regexp_replace(cat, part, '');
END loop;
IF TG_OP = 'INSERT' THEN
EXECUTE 'SELECT $1 FROM $2' --This is where I'd like to get the
INTO key_column_value --value of the column
USING key_column_name, NEW;
INSERT INTO inserted_kvp
(table_name, key, value)
VALUES
(TG_TABLE_NAME, key_column_name, key_column_value);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
, 대신
| table_name |key |value |
--------------------------------
|prefix_kvp1_suffix|kvp1|value1|
|prefix_kvp2_suffix|kvp2|value2|
를, 나는 오류 경우에 따라 취득 삽입 :
ERROR: syntax error at or near "$2"
LINE 1: SELECT $1 FROM $2
^
QUERY: SELECT $1 FROM $2
CONTEXT: PL/pgSQL function worldmapkit.trgfn_keyvalue_insert() line 13 at EXECUTE statement
나는 EXECUTE format()
과 몇 가지 다른 방법을 사용하여이 값을 얻는 다양한 변형을 시도했지만 여전히 운이 없다. 어떤 도움을 주셔서 감사합니다!
멋지게 완료되었습니다. 나는 이것이 PL/PgSQL에 추가되었다는 것을 잊어 버렸다. –