首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql从PHP脚本中复制批量数据-最好使用ADODB

问Postgresql从PHP脚本中复制批量数据-最好使用ADODB
EN

Stack Overflow用户
提问于 2017-09-30 04:41:34
回答 2查看 466关注 0票数 0

我有一个自定义软件,其中包括一个功能,以复制数据之间的postgresql服务器的表。它一次做一行,当服务器很接近时,这是很好的,但当我开始部署延迟> 300ms的服务器时,这根本不能很好地工作。

我相信解决方案是使用"COPY“语句,但我在实现它时遇到了困难。我正在使用ADODB php library

当我尝试从文件复制时,我得到错误“必须是超级用户才能复制到文件或从文件复制”。问题是我不知道如何从stdin复制"from STDIN“,而stdin实际上并没有通过管道传递到PHP脚本。有没有办法使用ADODB将stdin输入作为sql命令的一部分提供,或者有没有等效的命令可以让我在不等待每次单独插入的情况下进行一次批插入?

EN

回答 2

Stack Overflow用户

发布于 2017-10-02 03:00:17

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-09-30 10:06:35

我通过使用一个insert命令解决了这个问题,该命令将所有插入内容放在一条语句中,使用"union“-即

代码语言:javascript
复制
$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);

此解决方案的一个限制是字符串需要加引号,而整数等不能加引号。因此,我需要编写一些额外的代码来确保某些字段被加引号,而不是其他字段。

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

代码语言:javascript
复制
$coltypes=$todb->GetAll("select column_name,data_type 
                        from information_schema.columns 
                        where table_name='".$totable."'");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46496637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档