powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
4 сообщений из 4, страница 1 из 1
Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
    #35650427
D13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D13
Гость
Собственно вот такой вопрос. Сразу поясню зачем это надо - есть триггерная функция на plpgsql, которая должна вешаться на любые таблицы с любыми именами столбцов. При создании триггера на таблицу в качестве параметров триггерной функции указываются поля, которые нужно обрабатывать для этой таблицы. Как можно из NEW или OLD получить значения полей, зная их строковые имена из параметров?
...
Рейтинг: 0 / 0
Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
    #35650468
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D13Собственно вот такой вопрос. Сразу поясню зачем это надо - есть триггерная функция на plpgsql, ... Как можно из NEW или OLD получить значения полей, зная их строковые имена из параметров?никак. используйте другой язык.
...
Рейтинг: 0 / 0
Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
    #35653116
D13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D13
Гость
Как оказалось есть способ, но он правда скорее из разряда грязных хаков...
Код: plaintext
1.
execute 'select ('||quote_literal(NEW)||'::'||TG_RELID::regclass||').'||quote_ident(field_name) into my_var;
...
Рейтинг: 0 / 0
Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
    #35653213
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здорово ! :) сконвертировать запись в строку и потом обратно мне честно говоря в голову не приходило %) на самом деле есть ещё способ - через таблицу, а из таблицы уже можно по названию поля вытащить:
Код: plaintext
1.
create temp table _foo on commit drop as select new;
execute 'select _foo.' || quote_ident(var_with_field_name) into v;

только непонятно как генерировать уникальное название таблицы, если допустим один и тот же тригер несколько раз вызывается в транзакции. можно перед созданием дропать,

Код: plaintext
1.
2.
drop table if exists _foo;
create temp table _foo on commit drop as select new;
execute 'select _foo.' || quote_ident(var_with_field_name) into v;

но непонятно как быть если тригер рекурсивно может вызываться... отслеживать при этом ещё и в какой момент _foo можно удалять как то геморойно...

проще perl использовать:
Код: plaintext
$v = $_TD->{new}{$var_with_field_name};
и безпроблем :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в pl/pgsql вытащить из переменной типа record значение поля по его строковому имени?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]