2014-11-04 63 views
0

我有一个数组,我想用它来填充使用pg_copy_from的pgsql表。但是,当我没有为我的串行index列提供信息时,出现以下错误。pg_copy_from不会让我的索引列自身增加,并且不会占用空白值

ERROR: there is data for a column index 

如何强制pg_copy_from忽略我的索引列并让它独立增加。由于需要逗号分隔值我想这样做有时像这样将它传递一个空字符串索引的位置:

array_walk($logs, function(&$record) { 
    "'', " . $record; 
}); 

但没有奏效。我也尝试制作一张表,其中index是第二列,并且我没有传递第二个值,但是我收到了同样的错误。有没有这个选项?

回答

0

免责声明。我不是一个PHP开发人员,但它听起来像你可能需要在你的“索引”列中插入单词DEFAULT到你的数组中(并且我假设这是你的主键,它有一个音序器)。例如:

create temp table foobar(id serial, foo text); 
insert into foobar values (DEFAULT, 'hello'); 
insert into foobar values (DEFAULT, 'world'); 
select * from foobar; 
+----+-------+ 
| id | foo | 
+----+-------+ 
| 1 | hello | 
| 2 | world | 
+----+-------+ 
(2 rows) 
0

pg_copy_from不允许您排除某些列。 pg_query和pg_put_line的组合允许这是因为您自己的COPY语句:

<?php 
    $conn = pg_pconnect("dbname=foo"); 
    pg_query($conn, "create table bar (a serial, b char(16), d float8)"); // just an example 
    pg_query($conn, "copy bar(b, c) from stdin"); // only columns b and c ! 
    pg_put_line($conn, "hello world\t4.5\n"); 
    pg_put_line($conn, "goodbye world\t7.11\n"); 
    pg_put_line($conn, "\\.\n"); 
    pg_end_copy($conn); 
?> 
+0

谢谢我会试试这个。我很好奇,为什么这样:'array_walk($ logs,function(&$ item,$ key){$ item = time()。$ key。“,”。$ item;});'concatenation产生错误'PHP警告:pg_copy_from():复制命令失败:错误:列“entry”缺少数据 – 1252748 2014-11-05 15:36:30