Expression of check constraint - Mailing list pgsql-general

From Dirk Mika
Subject Expression of check constraint
Date
Msg-id DDD8FEB9-CCE9-4951-9022-A58DCC2998C4@mikatiming.de
Whole thread Raw
Responses Re: Expression of check constraint  (rob stone <floriparob@gmail.com>)
Re: Expression of check constraint  (Laurenz Albe <laurenz.albe@cybertec.at>)
Re: Expression of check constraint  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general

Hi,

 

if I add the following check constraint to a table:

 

ALTER TABLE public.times_places

   ADD CONSTRAINT ck_tp_ratified CHECK

          (ratified IS NULL OR (ratified IN ('Y', 'N')));

 

It becomes the following when describing the table in psql:

 

Check constraints:

    "ck_tp_ratified" CHECK (ratified IS NULL OR (ratified::text = ANY (ARRAY['Y'::character varying, 'N'::character varying]::text[])))

 

The behavior of the check constraint is logically identical and this seems plausible to me, but I still wonder why:

1.    does the expression x in (a, b) become the expression x = any(array(a, b)?

2.    why is the array expression casted so wildly? First to character varying and then to text[]?

3.    The column ratified is of type character varying(1).  Why is it casted to text?

 

Dirk

--
Dirk Mika
Software Developer



mika:timing GmbH
Strundepark - Kürtener Str. 11b
51465 Bergisch Gladbach
Germany

fon +49 2202 2401-1197
dirk.mika@mikatiming.de
www.mikatiming.de

AG Köln HRB 47509 * WEEE-Reg.-Nr. DE 90029884
Geschäftsführer: Harald Mika, Jörg Mika


 
Attachment

pgsql-general by date:

Previous
From: Souvik Bhattacherjee
Date:
Subject: Re: Allocating shared memory in Postgres
Next
From: rob stone
Date:
Subject: Re: Expression of check constraint