我想用一个数组来使用pg_copy_from
填充pgsql表。但是,如果我没有为我的序列index
列提供信息,则会收到以下错误消息。
ERROR: there is data for a column index
如何强制pg_copy_from
忽略我的索引列,让它独立递增。因为它需要以逗号分隔的值,我尝试这样做一段时间,在索引的位置传递一个空白字符串:
array_walk($logs, function(&$record) {
"'', " . $record;
});
但它没有用。我也尝试制作一个index
是第二列的表,我没有传递第二个值,但我收到了同样的错误。这有选择吗?
答案 0 :(得分: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)
答案 1 :(得分:0)
pg_copy_from不允许您排除某些列。由于您自己的COPY语句,pg_query和pg_put_line的组合允许这样做:
<?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);
?>