Преобразование mysql в psql

#mysql #postgresql #triggers

Вопрос:

Я ищу некоторую помощь в преобразовании mysql-скрипта в psql:-

 DROP TRIGGER IF EXISTS TR_Sales_CDC;
 
DELIMITER ;;
CREATE TRIGGER TR_Sales_CDC
  AFTER INSERT ON Sales
  FOR EACH ROW
BEGIN
  SELECT  NEW.ItemID , NEW.Category, New.Price, New.Quantity, New.OrderDate
  , New.DestinationState, New.ShippingType, New.Referral
  INTO @ItemID , @Category, @Price, @Quantity, @OrderDate
  , @DestinationState, @ShippingType, @Referral;
  CALL  CDC_TO_FIREHOSE(@ItemID , @Category, @Price, @Quantity, @OrderDate
  , @DestinationState, @ShippingType, @Referral);
END
;;
DELIMITER ;
 

Ошибка после выполнения этого:-

 ERROR:  syntax error at or near ";"
LINE 1: DROP TRIGGER IF EXISTS TR_Sales_CDC;
                                           ^
ERROR:  syntax error at or near "DELIMITER"
LINE 1: DELIMITER ;
        ^
ERROR:  syntax error at or near "BEGIN"
LINE 1: ...R TR_Sales_CDC AFTER INSERT ON Sales FOR EACH ROW BEGIN SELE...
                                                             ^
ERROR:  column "itemid" does not exist
LINE 1: CALL  CDC_TO_FIREHOSE(@ItemID , @Category, @Price, @Quantity...
                               ^
WARNING:  there is no transaction in progress
COMMIT
ERROR:  syntax error at or near "DELIMITER"
LINE 1: DELIMITER ;
 

Еще один скрипт mysql:-

 DROP PROCEDURE IF EXISTS CDC_TO_FIREHOSE; DELIMITER ;; CREATE PROCEDURE CDC_TO_FIREHOSE (IN ItemID VARCHAR(255), IN Category varchar(255), IN Price double(10,2), IN Quantity int(11), IN OrderDate timestamp, IN DestinationState varchar(2), IN ShippingType varchar(255), IN Referral  varchar(255)) LANGUAGE SQL BEGIN CALL mysql.lambda_async('arn:aws:lambda:us-east-1:XXXXXXXXXXXXX:function:CDCFromAuroraToKinesis', CONCAT('{ "ItemID" : "', ItemID, '", "Category" : "', Category, '", "Price" : "', Price, '", "Quantity" : "', Quantity, '", "OrderDate" : "', OrderDate, '", "DestinationState" : "', DestinationState, '", "ShippingType" : "', ShippingType, '", "Referral" : "', Referral, '"}') ); END ;; DELIMITER ;
 

Ошибка:-

 NOTICE:  procedure cdc_to_firehose() does not exist, skipping
DROP PROCEDURE
ERROR:  syntax error at or near "DELIMITER"
LINE 1: DELIMITER ;
        ^
ERROR:  syntax error at or near "("
LINE 1: ...rchar(255), IN Price double(10,2), IN Quantity int(11), IN O...
                                                             ^
WARNING:  there is no transaction in progress
COMMIT
ERROR:  syntax error at or near "DELIMITER"
LINE 1: DELIMITER ;
 

Справочный блог-
https://aws.amazon.com/blogs/database/capturing-data-changes-in-amazon-aurora-using-aws-lambda/

Комментарии:

1. Вам придется переписать свой код, код триггера MySQL никогда не будет работать на PostgreSQL. Например, РАЗДЕЛИТЕЛЬ не существует в PostgreSQL. postgresql.org/docs/current/plpgsql-trigger.html

2. @FrankHeikens Спасибо за ответ-С чего, по-вашему, мне следует начать?

3. Шаг 1: Прочитайте руководство. Шаг 2: Создайте функцию триггера. Шаг 3: Создайте триггер. Шаги 1 и 2 являются наиболее важными, шаг 3-самый простой.