Обсуждение: Stored function not accepting null value?

Поиск
Список
Период
Сортировка

Stored function not accepting null value?

От
"Deirdre Hall"
Дата:
<div class="Section1"><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">I am using a stored function to determine whether a table needs an update or insert, based on the
merge_dbfunction in the postgres documentation. (Not currently including it below because it’s rather long, but other
thanthe fact that it contains 27 values, it’s pretty much the same as that example.)</span></font><p
class="MsoNormal"><fontface="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">It works fine as long as all the values are defined: </span></font><p class="MsoNormal"><font
face="Arial"size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">select event_archive (7, 2, 2, 2, 3, text 'TIMS', 3, text 'I-90', 2, 3, 1.2, 1.3, 3, 1, 2, text
'important',timestamp '2008-01-01', </span></font><p class="MsoNormal"><font face="Arial" size="2"><span
style="font-size:10.0pt;
font-family:Arial">timestamp '2008-01-01', timestamp '2008-01-01', timestamp '2008-01-01',  timestamp '2008-01-01', 
text'2 hours', timestamp '2008-01-01', timestamp '2008-01-01', text 'oak', text 'main', 2);</span></font><p
class="MsoNormal"><fontface="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">but if I change any of the above values to null, the function simply doesn’t operate.
</span></font><pclass="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">select event_archive (7, 2, 2, 2, 3, text 'TIMS', 3, text 'I-90', 2, 3, 1.2, 1.3, 3, 1, 2, text
'important',timestamp '2008-01-01', </span></font><p class="MsoNormal"><font face="Arial" size="2"><span
style="font-size:10.0pt;
font-family:Arial">timestamp '2008-01-01', timestamp '2008-01-01', timestamp '2008-01-01',  timestamp '2008-01-01', 
text'2 hours', timestamp '2008-01-01', timestamp '2008-01-01', text 'oak', text 'main', null);</span></font><p
class="MsoNormal"><fontface="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">It returns:</span></font><p class="MsoNormal"><font face="Arial" size="2"><span
style="font-size:10.0pt;
font-family:Arial">Total query runtime: 0 ms.</span></font><p class="MsoNormal"><font face="Arial" size="2"><span
style="font-size:10.0pt;
font-family:Arial">1 rows retrieved.</span></font><p class="MsoNormal"><font face="Arial" size="2"><span
style="font-size:10.0pt;
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">versus a runtime of about 13ms when it successfully updates or inserts. I put raise notices into the
functionto try to debug, and it never even hits the first one in the first LOOP when there is a null
value.</span></font><pclass="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">The only column in the table that is declared not null would be the 7 in the above statement (id),
allother fields should be able to accept a null value.  Is this a known limitation with functions, or am I doing
somethingincorrectly?</span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt; 
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">Thanks,</span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">DHall</span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial"> </span></font></div><br /><hr size="1" /><font face="arial" size="2"> This communication may
containinformation that is confidential, privileged or subject to copyright. If you are not the intended recipient,
pleaseadvise by return e-mail and delete the message and any attachments immediately without reading, copying or
forwardingto others.</font><br /> 

Re: Stored function not accepting null value?

От
Tom Lane
Дата:
"Deirdre Hall" <d.hall@delcan.com> writes:
> I am using a stored function to determine whether a table needs an update
> or insert, based on the merge_db function in the postgres documentation.
> (Not currently including it below because it's rather long, but other than
> the fact that it contains 27 values, it's pretty much the same as that
> example.)

Well, not including it is a good way to ensure that no one will really
know what the problem is ... but I wonder whether you declared the
function STRICT.  That'd prevent it from being called with a NULL
argument, which seems to fit the reported behavior.
        regards, tom lane


Re: Stored function not accepting null value?

От
"Deirdre Hall"
Дата:
And that would be where I went wrong. Thanks.

DHall 

-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us] 
Sent: Wednesday, April 01, 2009 2:01 PM
To: Deirdre Hall
Cc: pgsql-sql@postgresql.org
Subject: Re: [SQL] Stored function not accepting null value? 

"Deirdre Hall" <d.hall@delcan.com> writes:
> I am using a stored function to determine whether a table needs an 
> update or insert, based on the merge_db function in the postgres
documentation.
> (Not currently including it below because it's rather long, but other 
> than the fact that it contains 27 values, it's pretty much the same as 
> that
> example.)

Well, not including it is a good way to ensure that no one will really
know what the problem is ... but I wonder whether you declared the
function STRICT.  That'd prevent it from being called with a NULL
argument, which seems to fit the reported behavior.
        regards, tom lane
____
This communication may contain information that is confidential, privileged or subject to copyright. If you are not the
intendedrecipient, please advise by return e-mail and delete the message and any attachments immediately without
reading,copying or forwarding to others.