powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как взять список триггеров?
10 сообщений из 10, страница 1 из 1
Как взять список триггеров?
    #39502059
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы сделать следующее:

1. Взять список юзерских триггеров, которые разрешены
2. Удалить все данные из базы
3. Вставить данные в базу из другой базы
4. Разрешить все триггеры. которые были взяты в пункте 1


Собственно, вопрос по пункту 1: как?
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502063
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,

Разумеется, из соответствующего системного каталога .
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502090
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинХотелось бы сделать следующее:

1. Взять список юзерских триггеров, которые разрешены
2. Удалить все данные из базы
3. Вставить данные в базу из другой базы
4. Разрешить все триггеры. которые были взяты в пункте 1


Собственно, вопрос по пункту 1: как?

В 90% случаев достаточно для проводить всю процедуру оптом после set session_replication_role to replica;
https://www.postgresql.org/docs/9.6/static/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE

PS:
Код: plaintext
1.
2.
3.
Консультант: У вас паяльник используется в качестве кипятильника. Вам лучше продать паяльник и купить кипятильник.
Клиент: Не можем. Паяльник нам нужен, мы им также забиваем гвозди. Кипятильником гвозди забивать не получится.
Консультант: Ах ты ж вот ведь как.
относится где то в 30% вопросов на этом форуме.

--
Maxim Boguk
dataegret.ru - лучшая русскоязычная поддержка PostgreSQL
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502130
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинХотелось бы сделать следующее:

1. Взять список юзерских триггеров, которые разрешены
2. Удалить все данные из базы
3. Вставить данные в базу из другой базы
4. Разрешить все триггеры. которые были взяты в пункте 1


Собственно, вопрос по пункту 1: как?
начать с того, что у триггера не 2 состояния, а несколько больше***
после вашей сманипуляции enable always триггера, которые могут вам быть нужны для обработки и своих событий и событий репликации окажутся в обычном ("origin") состоянии и вас придётся убить апстену и грязно надругаццо над телом. без особой надежды восстановить логическую связность распределенной системы.

если же таковых связей нет -- пользуйтесь рекомендацией Максима.

***вообще говоря это тянет на ошибку проектирования. enable/disable должен быть 2-х состоятельным. а вот R/O/A --должно хранить конечное назначение независимо от порывов порывистого дба.
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502529
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за развернутые ответы, но есть одно НО:
речь про PostgreSQL репликацию не идет.

Я буду вливать данные из базы MS SQL Server, одноразовая, в общем, операция для конкретной базы.
Приложением c#.
Вот я и хотел отрубить активные триггеры, вкинуть данные и затем разраешить те, которые были разрешены.
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502551
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинСпасибо за развернутые ответы, но есть одно НО:
речь про PostgreSQL репликацию не идет.

Я буду вливать данные из базы MS SQL Server, одноразовая, в общем, операция для конкретной базы.
Приложением c#.
Вот я и хотел отрубить активные триггеры, вкинуть данные и затем разраешить те, которые были разрешены.

А причем тут репликация?
session_replication_role = 'replica' отключает в сессии отработку всех триггеров кроме тех которые обьявлены как always (у вас таких нет иначе бы вы такие вопросы не задавали).
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502562
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг ХупинСпасибо за развернутые ответы, но есть одно НО:
речь про PostgreSQL репликацию не идет.

Я буду вливать данные из базы MS SQL Server, одноразовая, в общем, операция для конкретной базы.
Приложением c#.
Вот я и хотел отрубить активные триггеры, вкинуть данные и затем разраешить те, которые были разрешены.

А причем тут репликация?
session_replication_role = 'replica' отключает в сессии отработку всех триггеров кроме тех которые обьявлены как always (у вас таких нет иначе бы вы такие вопросы не задавали).

ок, теперь дошло
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502571
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk
<>
А причем тут репликация?
session_replication_role = 'replica' отключает в сессии отработку всех триггеров кроме тех которые обьявлены как always (у вас таких нет иначе бы вы такие вопросы не задавали). поправляю:
"...кроме тех которые обьявлены как always AND Replica"

авторtgenabled char Controls in which session_replication_role modes the trigger fires. O = trigger fires in "origin" and "local" modes, D = trigger is disabled, R = trigger fires in "replica" mode, A = trigger fires always.

т.е.
лучшим способом обойти одни только ориджин-триггеры -- вливать под session_replication_role = 'replica'
а вот от пользования дизейбл/енейбл крыжиками, или от дизейбл списком, происходит полная потеря назначения A/R триггеров.
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502582
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг ХупинСпасибо за развернутые ответы, но есть одно НО:
речь про PostgreSQL репликацию не идет.

Я буду вливать данные из базы MS SQL Server, одноразовая, в общем, операция для конкретной базы.
Приложением c#.
Вот я и хотел отрубить активные триггеры, вкинуть данные и затем разраешить те, которые были разрешены.

А причем тут репликация?
session_replication_role = 'replica' отключает в сессии отработку всех триггеров кроме тех которые обьявлены как always (у вас таких нет иначе бы вы такие вопросы не задавали).

а вот как бы еще отключить связи по PK->FK и после вставки данных включить?

порядок вставки данных в таблицы не соответствует их связям и получаю ошибки типа

insert or update on table "profile_1" violates foreign key constraint "fk_profile_1_profile_2"
...
Рейтинг: 0 / 0
Как взять список триггеров?
    #39502594
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMaxim Bogukпропущено...


А причем тут репликация?
session_replication_role = 'replica' отключает в сессии отработку всех триггеров кроме тех которые обьявлены как always (у вас таких нет иначе бы вы такие вопросы не задавали).

а вот как бы еще отключить связи по PK->FK и после вставки данных включить?

порядок вставки данных в таблицы не соответствует их связям и получаю ошибки типа

insert or update on table "profile_1" violates foreign key constraint "fk_profile_1_profile_2"

Так и FK триггера тоже отключаются при session_replication_role = 'replica'
другой вопрос что проверки потом никакой не будет и если вы зальете данные с нарушением FK - они там и останутся.

--
Maxim Boguk
dataegret.ru - лучшая русскоязычная поддержка PostgreSQL
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как взять список триггеров?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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