Re: Problem with trigger function

From: Dave Cramer <davecramer(at)postgres(dot)rocks>
To: Steve Baldwin <steve(dot)baldwin(at)gmail(dot)com>
Cc: byrnejb(at)harte-lyne(dot)ca, "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Problem with trigger function
Date: 2021-02-11 20:04:55
Message-ID: CADK3HHK5fRqxn3XqpbZafmmBPAM3Ni-Z24mv9ya+oG8rUMU-SA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

FWIW, messing with serial numbers like this is pretty risky.Sequences have
transactional semantics for a reason.

Dave Cramer
www.postgres.rocks

On Thu, 11 Feb 2021 at 14:57, Steve Baldwin <steve(dot)baldwin(at)gmail(dot)com> wrote:

> Try ... EXECUTE PROCEDURE customer_num_informix()
>
> Steve
>
> On Fri, Feb 12, 2021 at 6:47 AM James B. Byrne <byrnejb(at)harte-lyne(dot)ca>
> wrote:
>
>> I am trying to implement a trigger in a PostgreSQL-9.6.17 database:
>>
>> CREATE OR REPLACE FUNCTION customer_num_informix()
>> RETURNS trigger AS $$
>> BEGIN
>> -- An Aubit/Informix 4GL INSERT statement passes the value 0 to Informix
>> -- DBMS for columns that have the SERIAL data type. Informix will then
>> -- use the incremented serial number in place of 0. PostgreSQL instead
>> -- will simply take the value 0 and replace the incremented serial
>> number.
>> -- This trigger function emulates the Informix DBMS behaviour.
>> --
>> -- The NEW variable contains the data for the row to be INSERTed or
>> -- UPDATEd. It, and its complement OLD used for UPDATE and DELETE,
>> -- are automatically created and populated by PostgreSQL whenever
>> -- a data-change function is called.
>> --
>> IF NEW.customer_num = 0 THEN
>> SELECT nextval('customer_customer_num_seq') INTO
>> NEW.customer_customer_num;
>> ELSE
>> IF NEW.customer_customer_num > 0 THEN
>> PERFORM setval('customer_customer_num_seq',
>> NEW.customer_customer_num);
>> END IF;
>> END IF;
>> RETURN NEW;
>> END;
>> $$ LANGUAGE plpgsql;
>>
>> ALTER FUNCTION public.customer_num_informix() OWNER TO hll_4gl_testing;
>>
>> CREATE TRIGGER customer_num_serial
>> BEFORE INSERT ON customer
>> FOR EACH ROW EXECUTE customer_num_informix();
>>
>> The problem is that I am getting a syntax error on the CREATE TRIGGER
>> statement:
>>
>> ERROR: syntax error at or near "customer_num_informix"
>> LINE 3: FOR EACH ROW EXECUTE customer_num_informix();
>>
>> I do not see what the error is. What is wrong with the syntax I used?
>>
>> --
>> *** e-Mail is NOT a SECURE channel ***
>> Do NOT transmit sensitive data via e-Mail
>> Unencrypted messages have no legal claim to privacy
>> Do NOT open attachments nor follow links sent by e-Mail
>>
>> James B. Byrne mailto:ByrneJB(at)Harte-Lyne(dot)ca
>> Harte & Lyne Limited http://www.harte-lyne.ca
>> 9 Brockley Drive vox: +1 905 561 1241
>> Hamilton, Ontario fax: +1 905 561 0757
>> Canada L8E 3C3
>>
>>
>>
>>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message David G. Johnston 2021-02-11 20:05:31 Re: Problem with trigger function
Previous Message Stephen Frost 2021-02-11 19:59:37 Re: Encryption of Data Specific to a Tenant in PostgreSQL database | General Idea