mutiply inserts в postgre

Fuz

Новичок
mutiply inserts в postgre

Как в Постгре за один запрос вставить в таблицу несколько кортежей данных? insert into tblname (...) VALUES (...),(....)... - не работает, рекомендуемый в мануале copy не подходит т.к. я не могу читать данные с файла. что можно тут поделать?
 

neko

tеam neko
copy может читать с stdin.
без файла, т.е.

синтаксис с несколькими rows в один insert в pg почему-то не поддерживается.
 

Fuz

Новичок
можно поподробнее о stdin? никогда с этим не работал....
 

neko

tеam neko
> create table pff ( a int, b text );
CREATE TABLE
> copy pff from stdin with csv;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 10,foo
>> 20,bar
>> 30,baz
>> \.
> select * from pff;
a | b
----+-----
10 | foo
20 | bar
30 | baz
(3 rows)
 

Fuz

Новичок
а как в этот stdin загнать данные, которые мне нужны?
 

neko

tеam neko
что значит загнать?
ты выполняешь запрос COPY
потом шлеш данные.
 

Fuz

Новичок
ок. выполняю запрос - $db->query("Copy pff from stdin...") каким образом слать в stdin данные?
 

neko

tеam neko
я так думаю надо использовать pg_copy_to и pg_copy_from
ну и вообще раз уж ты пишеш программы на php
то читать документацию, это очень полезно и правильно.
 

Fuz

Новичок
просто перехожу сейчас на постгре после мускула. оч.непривычно. мануал читаю регулярно. я использую PEAR::DB для доступа к базе. запрос выполняю $db->query("Copy pff from stdin...")..как теперь в этот stdin слать данные?
 

Fuz

Новичок
Делаю так:
PHP:
$add = pg_copy_from($db, 'records', $data, ';');
где $data = Array ( [0] => NULL;aaa;100 [1] => NULL;bbb;200 [2] => NULL;ccc;300 )
Возвращает false =((( где может быть ошибка?
Единичный запрос вручную - проходит, дело не в структуре таблицы.
 

neko

tеam neko
включи всякий вывод ошибок.
посмотри в лог PG.

ну и главное, сначала попробуй сделать copy_to, а copy_from делай по аналогии с тем, что оно вернет.

-~{}~ 05.06.06 17:33:

вообще я рекоммендую вернутся назад к использованию mysql.
потому что проблем будет в дальнейшем очень много.
 

Fuz

Новичок
$see = pg_copy_to($this->db_handle, 'records', $data2); возвращает пустоту. проверял коннект к базе - всё нормально.

-~{}~ 05.06.06 17:39:

neko
вернуться - без вариантов. pg_result_error показывает пустоту.
 

neko

tеam neko
я тебе ничем помочь больше немогу.

я вообще непонимаю, что ты здесь делаешь.

sql комманду нужную нашли.
php функцию которая за нее отвечает тоже нашли.
пример я дал.

что будет делать нормальный человек если у него после этого что-то неполучается?
нормальный человек откроет google и там будет искать примеры.
если человек хотя бы немного дружит с головой, он догадается что есть рассылка по postgresql где этот вопрос уже, возможно, обсуждался.

а что делаешь ты.
ты о каждом своем шаге сюда сообщаешь дважды.
и оперируешь при этом терминами вроде "возвращает пустоту".

я тебе ничем помочь не могу.
попробуй научится хоть что-нибудь отлаживать.
пройди краткий курс поиска в интернете.
может быть это поможет.

-~{}~ 05.06.06 17:42:

я: вообще я рекоммендую вернутся назад к использованию mysql.
он: вернуться - без вариантов. pg_result_error показывает пустоту.

ты вообще как, русский язык понимаешь?
 

Fuz

Новичок
$see = pg_copy_to($this->db_handle, 'records', ';');
выдаёт Array ( [0] => 1432009;aaa;200 ), т.е. то, что надо.

-~{}~ 05.06.06 17:45:

neko
русский язык понимаю. "pg_result_error показывает пустоту" - было к "включи всякий вывод ошибок". Тема закрыта.
 
Сверху