Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
record implode
|
|||
|---|---|---|---|
|
#18+
Есть в триггере запись OLD. как покрасивше превратить ее в строку? например: Дано: OLD.id=1 OLD.name='Вася' OLD.drunk=true На выходе: str = 'id=1;name=Вася;drunk=true'; либо просто str = '1;Вася;true'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2005, 07:26 |
|
||
|
record implode
|
|||
|---|---|---|---|
|
#18+
ErlanЕсть в триггере запись OLD. как покрасивше превратить ее в строку? например: Дано: OLD.id=1 OLD.name='Вася' OLD.drunk=true На выходе: str = 'id=1;name=Вася;drunk=true'; либо просто str = '1;Вася;true'; Наверно интерисует более красивый вариант чем "ручками"? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2005, 10:08 |
|
||
|
record implode
|
|||
|---|---|---|---|
|
#18+
Не только. Что если количество полей и их названия неизвестны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2005, 11:51 |
|
||
|
record implode
|
|||
|---|---|---|---|
|
#18+
Вот тебе тест - из которого нагладно видно что и как PG8.03 --=========== CREATE TABLE test(ID SMALLINT,history_records TEXT); --=========== CREATE OR REPLACE FUNCTION TEST_TRIG () RETURNS trigger AS $body$ BEGIN /*неявный каст из типа рекорд в текст*/ new.history_records=OLD; return new; END; $body$ LANGUAGE 'plpgsql'; --============= CREATE TRIGGER test_tr BEFORE UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE TEST_TRIG(); --============= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2005, 13:38 |
|
||
|
record implode
|
|||
|---|---|---|---|
|
#18+
domanixВот тебе тест - из которого нагладно видно что и как PG8.03 --=========== CREATE TABLE test(ID SMALLINT,history_records TEXT); --=========== CREATE OR REPLACE FUNCTION TEST_TRIG () RETURNS trigger AS $body$ BEGIN /*неявный каст из типа рекорд в текст*/ new.history_records=OLD; return new; END; $body$ LANGUAGE 'plpgsql'; --============= CREATE TRIGGER test_tr BEFORE UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE TEST_TRIG(); --============= Ну да, тип RECORD можно привести к TEXT. И получим мы строку вида "(value,value,...,value)". А имена полей - как извлечь? Кажется, в pl/pgsql это не-ре-аль-но, я, по крайней мере, не нашёл. :-) Но их возможно извлечь в других процедурных языках, pl/perl, pl/tcl: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Не знаю, что там у tcl с производительностью, он у меня почту отправляет (и только), но на некритичных табличках можно, думаю, задействовать. Например, для "маршрутизации" данных в соответствующие классы-потомки, если заведомо неизвестно количество полей (т.е., возможны NULL-значения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:29 |
|
||
|
record implode
|
|||
|---|---|---|---|
|
#18+
2 glebofff: в TCL судя по документации $NEW и $OLD поля идут в алфавитном порядке? В pl/perl тоже ключи хеша $_TD->{new} не упорядочены, значит чтобы получить порядок столбцов как в родной таблице, нужно лезть в pg_attibute - это на каждую изменяемую строку будет накладно. Плюс, для вставки в таблицу строки её нужно дополнительно обрабатывать - кавычки, бэкслеши... Короче тормозить будет. Если ещё актуально, вот такая функция получилась, на перле: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2005, 07:57 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=334&tid=2006936]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 371ms |

| 0 / 0 |
