Re: Explicitly inserting NULL values into NOT NULL DEFAULT 0 columns

From: Etienne Rouxel <rouxel(dot)etienne(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Explicitly inserting NULL values into NOT NULL DEFAULT 0 columns
Date: 2012-10-02 16:01:34
Message-ID: 1349193694874-5726334.post@n5.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi
I have the same "problem" as Tanmay Patel.

SELECT * FROM version();
returns :
"PostgreSQL 8.4.12 on i386-apple-darwin, compiled by GCC
i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5370),
32-bit"

Here is my simplified code :

CREATE TABLE public.mytable (
refno int NOT NULL DEFAULT 1
);

CREATE FUNCTION public.mytable_insert_refno() RETURNS trigger AS $BODY$
BEGIN
NEW.refno := 123;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql
VOLATILE;

CREATE TRIGGER mytable_insert_refno
BEFORE INSERT
ON public.mytable
FOR EACH ROW
EXECUTE PROCEDURE public.mytable_insert_refno();

INSERT INTO public.mytable (refno) VALUES (NULL) RETURNING *;

As we can see when running this code, the trigger prevent the NULL value to
reach the NOT NULL constraint check and a relation is successfully inserted
in the table with value 123.

I managed to realize this behavior when unit testing my database, the
question I am asking myself is : in which order are the constraints checked?
Is this order guarantee or not?

--
View this message in context: http://postgresql.1045698.n5.nabble.com/Explicitly-inserting-NULL-values-into-NOT-NULL-DEFAULT-0-columns-tp5012482p5726334.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message David Johnston 2012-10-02 16:36:10 Re: Re: Explicitly inserting NULL values into NOT NULL DEFAULT 0 columns
Previous Message Andrew Hannon 2012-10-02 15:48:20 Long-running query on replica not timing out