From 32fcf007dbc56b85b76bd1c0716cc11bbc5d4d3d Mon Sep 17 00:00:00 2001 From: fcy Date: Mon, 15 Jul 2024 16:51:13 +0800 Subject: [PATCH 1/2] feat: drop create instead of create or replace --- drivers/trigger/queries.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/trigger/queries.go b/drivers/trigger/queries.go index 8d2c495..7ba0e04 100644 --- a/drivers/trigger/queries.go +++ b/drivers/trigger/queries.go @@ -133,12 +133,14 @@ func (d *Driver) getCreateTriggerSqlForOperation(listenerUid string, l *flash.Li if operation != "TRUNCATE" { statement += fmt.Sprintf(` - CREATE OR REPLACE TRIGGER "%s" AFTER %s ON %s FOR EACH ROW EXECUTE PROCEDURE "%s"."%s"();`, - triggerName, operation, d.sanitizeTableName(l.Table), d.Config.Schema, triggerFnName) + DROP TRIGGER IF EXISTS "%s" ON %s; + CREATE TRIGGER "%s" AFTER %s ON %s FOR EACH ROW EXECUTE PROCEDURE "%s"."%s"();`, + triggerName, d.sanitizeTableName(l.Table), triggerName, operation, d.sanitizeTableName(l.Table), d.Config.Schema, triggerFnName) } else { statement += fmt.Sprintf(` - CREATE OR REPLACE TRIGGER "%s" BEFORE TRUNCATE ON %s FOR EACH STATEMENT EXECUTE PROCEDURE "%s"."%s"();`, - triggerName, d.sanitizeTableName(l.Table), d.Config.Schema, triggerFnName) + DROP TRIGGER IF EXISTS "%s" ON %s; + CREATE TRIGGER "%s" BEFORE TRUNCATE ON %s FOR EACH STATEMENT EXECUTE PROCEDURE "%s"."%s"();`, + triggerName, d.sanitizeTableName(l.Table), triggerName, d.sanitizeTableName(l.Table), d.Config.Schema, triggerFnName) } return statement, eventName, nil From 586ecd0566b24de192a713883f2fca9877630972 Mon Sep 17 00:00:00 2001 From: fcy Date: Mon, 15 Jul 2024 18:07:34 +0800 Subject: [PATCH 2/2] comment: drop + create for Pgsql13 compatibility --- drivers/trigger/queries.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/trigger/queries.go b/drivers/trigger/queries.go index 7ba0e04..c7a277d 100644 --- a/drivers/trigger/queries.go +++ b/drivers/trigger/queries.go @@ -109,6 +109,7 @@ func (d *Driver) getCreateTriggerSqlForOperation(listenerUid string, l *flash.Li } if rawConditionSql == "" { + statement = fmt.Sprintf(` CREATE OR REPLACE FUNCTION "%s"."%s"() RETURNS trigger AS $trigger$ BEGIN @@ -132,11 +133,13 @@ func (d *Driver) getCreateTriggerSqlForOperation(listenerUid string, l *flash.Li } if operation != "TRUNCATE" { + // Keep drop + create instead of 'create or replace' for Pgsql13 compatibility statement += fmt.Sprintf(` DROP TRIGGER IF EXISTS "%s" ON %s; CREATE TRIGGER "%s" AFTER %s ON %s FOR EACH ROW EXECUTE PROCEDURE "%s"."%s"();`, triggerName, d.sanitizeTableName(l.Table), triggerName, operation, d.sanitizeTableName(l.Table), d.Config.Schema, triggerFnName) } else { + // Keep drop + create instead of 'create or replace' for Pgsql13 compatibility statement += fmt.Sprintf(` DROP TRIGGER IF EXISTS "%s" ON %s; CREATE TRIGGER "%s" BEFORE TRUNCATE ON %s FOR EACH STATEMENT EXECUTE PROCEDURE "%s"."%s"();`,