check_constraint and Extract not working? - Mailing list pgsql-sql

From Fernando Hevia
Subject check_constraint and Extract not working?
Date
Msg-id 014b01c79411$6d216b10$8f01010a@iptel.com.ar
Whole thread Raw
List pgsql-sql
<p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">Just to
besure I am getting this right:</font></span><p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"></span><pdir="LTR"><span lang="en-us"><font face="Arial" size="2">I have a</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">big table I
want</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> to
partition:</font></span><pdir="LTR"><span lang="en-us"><font face="Arial" size="2">create</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">table</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial"
size="2">big_table</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font
face="Arial"size="2">(</font></span><p dir="LTR"><span lang="en-us">       </span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">row_date timestamp</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> with time
zone</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">,</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span
lang="en-us">       <font face="Arial" size="2">row_data</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">character varying</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">(80)</font></span><p
dir="LTR"><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">};</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"></span><p
dir="LTR"><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span
lang="en-us"><fontface="Arial" size="2">A nice solution would be to</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">spread</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2"></font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">its</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">rows in one of 12</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">child</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">tables according to which
monththe</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">date field</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2"> belong</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2">s</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2"> to.</font></span><p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">So</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2"></font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><font face="Arial" size="2">my</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2"> parent table is</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">partitioned into 12 childs, one for each month:
child</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">_</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">1,child</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">_</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">2,...</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">,</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">child</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">_</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">12.</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"></span><p
dir="LTR"><spanlang="en-us"><font face="Arial" size="2">My check constraints</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">go like</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> th</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">is</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">:</font></span><p
dir="LTR"><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">ALTER
TABLE</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font face="Arial"
size="2">child_</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">1ADD CONSTRAINT chk_</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2">child</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2">1_</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2">month</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2"> CHECK (EXTRACT(MONTH FROM</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><font face="Arial" size="2">row_</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">date</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2"> =  1::DOUBLE PRECISION);</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">ALTER TABLE</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"> <font face="Arial" size="2">child_</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2">2</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2"> ADD CONSTRAINT chk_</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">child</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">2</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">_</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">month</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> CHECK (EXTRACT(MONTH
FROM</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font face="Arial"
size="2">row_</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">date</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">)= </font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font face="Arial"
size="2">2</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">::DOUBLEPRECISION);</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"></span><pdir="LTR"><span lang="en-us"><font face="Arial" size="2">...</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">Well, the check_constraint exclusion won</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">’</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2">t work with these. I assume
thefunction Extract is the problem here</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2"> and haven</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2">’</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2">t been able to find a workaround.</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">I have seen several examples where a table is partitioned</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> by date but in those cases
theyear is also specified. ie: child</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">_</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">200612, child_200701, child_200702, etc.</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"></font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">Though with this scenario
Ican avoid date functions</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font
face="Arial"size="2">in the check constraint, t</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">his would force me to keep creating</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"> <font face="Arial" size="2">new</font></span><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"><font face="Arial" size="2"> child tables from time to
time.</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2"></font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> </span><p dir="LTR"><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2">I would really like to avoid that kind of
maint</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">e</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">n</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">an</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">ce</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">,and f</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">or</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font face="Arial"
size="2">mycase</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font face="Arial"
size="2">12 partitions</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"> <font
face="Arial"size="2">are</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"><font
face="Arial"size="2"> quite enough</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2">.</font></span><p dir="LTR"><span lang="en-us"><font face="Arial" size="2">Any
suggestionshow to achieve this</font></span><span lang="es-ar"></span><span lang="es-ar"></span><span
lang="en-us"><fontface="Arial" size="2"> otherwise</font></span><span lang="es-ar"></span><span
lang="es-ar"></span><spanlang="en-us"><font face="Arial" size="2">?</font></span><p dir="LTR"><span
lang="es-ar"></span><spanlang="es-ar"></span><span lang="en-us"></span><p dir="LTR"><span lang="en-us"><font
face="Arial"size="2">Regards,</font></span><p dir="LTR"><span lang="en-us"><font face="Arial"
size="2">Fernando.</font></span><spanlang="es-ar"></span><span lang="es-ar"></span><span lang="en-us"></span> 

pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: Convert serial column to regular integer
Next
From: Joost Kraaijeveld
Date:
Subject: Howto convert / (re)store xml column to table in trigger using contrib/xml2?