Функция триггера не вставляет все записи в таблицу data_sync_datahistory с application_name = 'dibpos_offline'
Я работаю над триггерной функцией PostgreSQL для регистрации изменений в таблице data_sync_datahistory
при выполнении операций INSERT
или UPDATE
над другими таблицами. Триггер настроен так, чтобы регистрировать эти изменения только в том случае, если для application_name
установлено значение 'dibpos_offline'
. Однако я столкнулся с проблемой, когда некоторые записи не вставляются в таблицу data_sync_datahistory
, когда в базу данных вставляется несколько записей.
Вот моя функция запуска:
IF current_setting('application_name') = 'dibpos_offline' THEN IF TG_OP = 'INSERT' THEN INSERT INTO data_sync_datahistory (created, modified, data, source, table_name) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ROW_TO_JSON(NEW), 'local', TG_TABLE_NAME); ELSIF TG_OP = 'UPDATE' THEN INSERT INTO data_sync_datahistory (created, modified, data, source, table_name) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ROW_TO_JSON(NEW), 'local', TG_TABLE_NAME); END IF; END IF; RETURN NEW;
А вот соответствующая часть конфигурации моей базы данных:
DATABASES = { 'default': { 'NAME': os.environ.get('DB_NAME', "postgres") if os.environ.get("DB_HOST", None) else os.path.join(Path.home(), 'dibpos.sqlite3'), 'USER': os.environ.get('DB_USER', "postgres"), 'PASSWORD': os.environ.get('DB_PASSWORD', '1234'), 'HOST': os.environ.get('DB_HOST', ''), 'PORT': os.environ.get('DB_PORT', 5432), 'CONN_MAX_AGE': None, 'CONN_HEALTH_CHECK': True, 'OPTIONS': { 'options': '-c application_name=dibpos_offline' }, } }
Проблема: Когда в базу данных вставляется несколько записей, некоторые из них не заносятся в таблицу data_sync_datahistory
. Похоже, что триггерная функция пропускает некоторые записи.
Вопросы:
Может ли проблема быть связана с конфигурацией базы данных или самой функцией триггера?
Есть ли какие-то общие подводные камни или вещи, которые нужно проверить при использовании триггеров с
application_name
настройками?Существует ли способ обеспечить последовательную регистрацию всех записей?
Любой совет или предложение о том, как устранить эту проблему, будет очень признателен!