Function Column Expansion Causes Inserts To Fail

Поиск
Список
Период
Сортировка
От David Johnston
Тема Function Column Expansion Causes Inserts To Fail
Дата
Msg-id 000001cc1f0d$e704f740$b50ee5c0$@yahoo.com
обсуждение исходный текст
Ответы Re: Function Column Expansion Causes Inserts To Fail
Список pgsql-general

PostgreSQL 9.0.4

 

The following script fails even though the “pkonlytest” table is empty since we just created it…

 

>>>>>>>>>>>>>>>>>>>>>>>>>> BEGIN SCRIPT

 

CREATE TABLE pkonlytest (

       pkid text PRIMARY KEY

);

 

CREATE OR REPLACE FUNCTION createpkrecord(INOUT pkvalue text, OUT col1 boolean, OUT col2 boolean)

RETURNS record

AS $$

BEGIN

                INSERT INTO pkonlytest (pkid) VALUES (pkvalue);

                col1 = true;

                col2 = false;

END;

$$

LANGUAGE 'plpgsql';

 

SELECT (   createpkrecord('1')    ).*;

 

 

SQL Error: ERROR:  duplicate key value violates unique constraint "pkonlytest_pkey"

DETAIL:  Key (pkid)=(1) already exists.

CONTEXT:  SQL statement "INSERT INTO pkonlytest (pkid) VALUES (pkvalue)"

PL/pgSQL function "createpkrecord" line 2 at SQL statement

 

>>>>>>>>>>>>>>>>>>END SCRIPT

 

If you call the function without the column expansion (and required parentheses) it work just fine.

 

SELECT createpkrecord(‘1’);

 

There is a workaround…

 

SELECT (func.result).* FROM (

SELECT  createpkrecord('4') as result ) func

 

David J.

 

 

В списке pgsql-general по дате отправления:

Предыдущее
От: Alban Hertroys
Дата:
Сообщение: Re: How to check a table content efficiently? With LIMIT and OFFSET?
Следующее
От: Cédric Villemain
Дата:
Сообщение: Re: Shared Buffer Size