Re: Does PLPythonU support COPY table FROM string?

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Does PLPythonU support COPY table FROM string?
Дата
Msg-id 55E08282.8060909@aklaver.com
обсуждение исходный текст
Ответ на Does PLPythonU support COPY table FROM string?  (Dominik Czarnota <dominik.b.czarnota@gmail.com>)
Список pgsql-general
On 08/28/2015 08:32 AM, Dominik Czarnota wrote:
> I am launching it from postgres plpythonu function (postgres version:
> PostgreSQL 9.4.4 on x86_64-unknown-linux-gnu, compiled by gcc (Debian
> 4.9.2-10) 4.9.2, 64-bit).
>
> The error can be reproduced using the SQL below:
>
> DROP TABLE IF EXISTS test;
> CREATE TABLE test(field1 integer, field2 integer);
>
> CREATE OR REPLACE FUNCTION example() RETURNS VOID AS
> $$
>      plpy.execute("COPY test (field1, field2) FROM STDIN
> DELIMITER',';\n1,2\n\\.")
> $$ LANGUAGE 'plpythonu';
>
> select example();
>
>
> Maybe there is a way to get into the underlying psycopg2 driver and call
> some method that would do COPY FROM, but I can't find anything related
> to it in the docs.

plpythonu does not use psycopg2. When I run your test code on 9.4.4 I get:

aklaver@test=> select example();
ERROR:  spiexceptions.SyntaxError: syntax error at or near "1"
LINE 2: 1,2
         ^
QUERY:  COPY test (field1, field2) FROM STDIN DELIMITER',';
1,2
\.
CONTEXT:  Traceback (most recent call last):
   PL/Python function "example", line 2, in <module>
     plpy.execute("COPY test (field1, field2) FROM STDIN
DELIMITER',';\n1,2\n\\.")
PL/Python function "example"


It is a similar error, but it is not coming from psycopg2, so I am still
not sure how you got the error below?

>
> 2015-08-28 17:15 GMT+02:00 Adrian Klaver <adrian.klaver@aklaver.com
> <mailto:adrian.klaver@aklaver.com>>:
>
>     On 08/28/2015 05:58 AM, Dominik Czarnota wrote:
>
>         Hello,
>
>         Is there any possibility to make COPY from list of records in
>         PLPythonU?
>
>         I've tried to simply call `plpy.execute(query)` with such query:
>
>         COPY table (field1, field2, field3) FROM STDIN DELIMITER',';
>         val1,val2,val3
>         \.
>
>         But it fails with not so explicit error:
>         ProgrammingError: (psycopg2.ProgrammingError)
>         spiexceptions.SyntaxError:
>         syntax error at or near "val1"
>         LINE 2: val1,val2,val3
>                   ^
>
>
>     The above is a psycopg2 error, so where are you running this and how?
>
>
>
>         However the same thing works in psql.
>
>         After some googling I found out that it doesn't work inside sql
>         functions because there is no STDIN (
>         http://www.postgresql.org/message-id/000501c5acc9$83747aa0$0501a8c0@plexus
>         ).
>
>
>         I've got working solution which was saving tmp file and then calling
>         `COPY table FROM 'path'` but that's not cool.
>
>         Did I miss something in plpythonu api? If not, where can I post
>         "feature
>         request" for that?
>         Or can you point me place where I could dig into the code and
>         implement it?
>
>
>         ----
>         Dominik Czarnota
>
>
>
>     --
>     Adrian Klaver
>     adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
>
>


--
Adrian Klaver
adrian.klaver@aklaver.com


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

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Does PLPythonU support COPY table FROM string?
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Does PLPythonU support COPY table FROM string?