Postgresql从PHP脚本中复制批量数据 - 理想情况下使用ADODB

时间:2017-09-29 20:41:34

标签: php postgresql

我有自定义软件,其中包括在postgresql服务器上的表之间复制数据的功能。它一次完成这一行,当服务器靠近时这很好,但是当我开始部署延迟为>的服务器时。 300毫秒,这根本不适用。

我认为解决方案是使用“COPY”语句,但我很难实现它。我正在使用ADODB php library

当我从文件中尝试复制时,我收到错误“必须是超级用户才能复制到文件或从文件复制”。问题是我不知道如何复制“从STDIN”,其中stdin实际上没有通过管道传输给PHP脚本。有没有办法使用ADODB作为sql命令的一部分提供stdin输入,或者是否有一个等效命令允许我在不等待每个插入的情况下进行批量插入?

2 个答案:

答案 0 :(得分:1)

Postgresql扩展名dblink()允许您将数据从一个服务器的数据库复制到另一个服务器。您需要知道服务器的IP地址和运行数据库的端口。以下是一些包含更多信息的链接:

http://www.leeladharan.com/postgresql-cross-database-queries-using-dblink

https://www.postgresql.org/docs/9.3/static/dblink.html

答案 1 :(得分:0)

我通过使用insert命令解决了这个问题,该命令在单个语句中使用“union all”包含所有插入 - 即

$sql="INSERT INTO tablename (name,payload)
    select 'hello', 'world' union all
    select 'this', 'is a test' union all
    select 'and it', 'works'";
$q=$conn->Execute($sql);

这个解决方案的一个限制是字符串需要被引用,而整数,例如,必须不是。因此,我需要编写一些额外的代码,以确保某些字段被引用但不是其他字段。

要找出需要引用哪些列,我使用了

$coltypes=$todb->GetAll("select column_name,data_type 
                        from information_schema.columns 
                        where table_name='".$totable."'");