|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
гуру постгреса, подскажите плиз, могу ли я в триггере на таблицу использовать ту же схему, в которой он создан, без явного указания оной? т.е. в схеме my я создаю таблицу tab, вешаю на неё триггер, в котором обращаюсь, допустим, к таблице tab2, и вот если я вставляю в таблицу tab из другой схемы через insert into my.tab, то в триггере активная схема не my, а та, из под которой я вызываю инсерт. имхо, это тупо, нужно прописывать схему явно в триггере, и при деплое на разные схемы приходится менять имя схемы во всем скрипте вместо одной лишь установки search_path в начале. подскажите, плиз, как правильно делать. --------------------------------------- мистер Петя ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 14:11 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
если вдруг хреново объяснил, то вот пример.. Код: plsql 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. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 16:47 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
вот как эту проблему можно решить, не прописывая схему явно в триггере? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 17:02 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
bdsm_sql, Вам надо прыгать от схемы таблицы на которую сработал триггер а не от схемы где функция триггера была. А это делается через https://www.postgresql.org/docs/10/static/plpgsql-trigger.html#PLPGSQL-DML-TRIGGER TG_TABLE_SCHEMA Data type name; the name of the schema of the table that caused the trigger invocation. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 17:03 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
а как его использовать? если делаю в триггере Код: plsql 1.
то теряется предыдущее значение current_schema. все запросы в триггере делать в динамике как-то тоже неохота.. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 17:11 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
bdsm_sqlа как его использовать? если делаю в триггере Код: plsql 1.
то теряется предыдущее значение current_schema. все запросы в триггере делать в динамике как-то тоже неохота.. свитчеваться , не ? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 19:11 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
qwwq, мне вопрос не в том чтобы триггер создать на обе схемы, а можно ли создать такой триггер вообще без явного указания схемы внутри. получается, никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 22:31 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
bdsm_sqlqwwq, мне вопрос не в том чтобы триггер создать на обе схемы, а можно ли создать такой триггер вообще без явного указания схемы внутри. получается, никак? Триггер который бы несмотря на выставленный search_path ориентировался на схему таблицы где он был вызван? Динамический SQL для таких задач нужен и по другому не придумывается так как запросы то будут разные при разных схемах на входе. Можно попробовать сохранять search_path в начале триггера, менять на нужный вам и в конце триггера возвращать назад. Но игры с search_path в хранимках еще никого до добра не доводили. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2018, 03:49 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
bdsm_sql, Можно для триггерной функции явно прописать seach_path, который она должна использовать. В вашем примере это будет так: Код: sql 1. 2. 3. 4. 5. 6. 7.
По окончании работы функции seach_path автоматически восстанавливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2018, 08:30 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
bdsm_sqlqwwq, мне вопрос не в том чтобы триггер создать на обе схемы, а можно ли создать такой триггер вообще без явного указания схемы внутри. получается, никак? как вы одной и той же разобранной (в плане) до оидов ф--ей обслужите несколько разных таблиц ? нужно как-то навязать инвалидизацию и переразбор. //а вообще -- надо на сишные констрейнт--ф--ии посмотреть. параметрические. думается. фк там, к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2018, 16:31 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
qwwq//а вообще -- надо на сишные констрейнт--ф--ии посмотреть. параметрические. думается. фк там, к примеру. https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/ri_triggers.c#L784 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2018, 17:12 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
Павел ЛузановМожно для триггерной функции явно прописать seach_path, который она должна использовать. ... По окончании работы функции seach_path автоматически восстанавливается. А ещё удобнее использовать FROM CURRENT: Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2018, 20:46 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
PgSQLanonymous3Павел ЛузановМожно для триггерной функции явно прописать seach_path, который она должна использовать. ... По окончании работы функции seach_path автоматически восстанавливается. А ещё удобнее использовать FROM CURRENT: Код: sql 1. 2. 3. 4. 5. 6. 7.
спасибо! то что нужно! qwwq, я не хочу одну функцию на несколько таблиц, я хочу один раз в начале скрипта поменять схему и задеплоить всю структуру на ещё одну схему и мне не нравится, что имя схемы разбросано по всему скрипту ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:05 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
PgSQLanonymous3, Спасибо вам за интересное решение! Не подскажете где можно в документации про это почитать- всё просмотрел и облазил, но не смог найти упоминания FROM CURRENT; ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2018, 09:45 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
VisermozPgSQLanonymous3, Спасибо вам за интересное решение! Не подскажете где можно в документации про это почитать- всё просмотрел и облазил, но не смог найти упоминания FROM CURRENT; https://www.postgresql.org/docs/current/static/sql-createfunction.html авторThe SET clause causes the specified configuration parameter to be set to the specified value when the function is entered, and then restored to its prior value when the function exits. SET FROM CURRENT saves the value of the parameter that is current when CREATE FUNCTION is executed as the value to be applied when the function is entered. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2018, 10:47 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
PgSQLanonymous3Павел ЛузановМожно для триггерной функции явно прописать seach_path, который она должна использовать. ... По окончании работы функции seach_path автоматически восстанавливается. А ещё удобнее использовать FROM CURRENT: Код: sql 1. 2. 3. 4. 5. 6. 7.
От блин, редкий случай когда показали функциональность про которую я не знал. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2018, 13:15 |
|
имя схемы в триггере
|
|||
---|---|---|---|
#18+
Пара интересных кейсов с багом инвалидации кэша pg catalog для триггеров https://www.postgresql.org/message-id/20171030125345.1448.24038@wrigleys.postgresql.org]https://www.postgresql.org/message-id/20171030125345.1448.24038@wrigleys.postgresql.org https://www.postgresql.org/message-id/CAAqA9PQXEmG=k3WpDTmHZL-VKcMpDEA3ZC06Qr0ASO3oTA7bdw@mail.gmail.com ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2018, 13:57 |
|
|
start [/forum/topic.php?fid=53&msg=39587356&tid=1995988]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 432ms |
0 / 0 |