↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.2 / 7.1
历史版本PostgreSQL 7.2 已于 2007 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

3.7. 与 COPY 命令相关的函数 #

PostgreSQL 中的 COPY 命令有一些选项,可以读取或写入 libpq++ 所使用的网络连接。 因此,需要一些函数来直接访问这个网络连接,使应用可以充分利用这一能力。

  • PgDatabase::GetLine 把后端服务器传输的一行以换行符结尾的字符读入大小为 length 的缓冲区 string。

    int PgDatabase::GetLine(char* string, int length)
    

    与 Unix 系统例程 fgets() 一样, 此例程最多复制length-1 个字符到 string。但它又像 gets(),会把结尾的换行符转换为一个零字节。

    PgDatabase::GetLine 在文件末尾返回 EOF,整行已读取时返回 0,而缓冲区已满但尚未读到终止换行符时返回 1。

    注意,应用程序必须检查新行是否由一个反斜杠后跟一个句点(\.)组成,这表示后端服务器已经完成了 COPY 结果的发送。 因此,如果应用预期会收到长度超过 length-1 个字符的行,务必非常仔细地检查 PgDatabase::GetLine 的返回值。

  • PgDatabase::PutLine 向后端服务器发送一个以空字符结尾的 string。

    void PgDatabase::PutLine(char* string)
    

    应用程序必须显式发送字符 \.,向后端表明它已完成数据的发送。

  • PgDatabase::EndCopy 与后端同步。

    int PgDatabase::EndCopy()
    

    该函数等待后端完成对 COPY 的处理。无论是用 PgDatabase::PutLine 向后端发送完最后一个字符串,还是用 PgDatabase::GetLine 从后端接收完最后一个字符串之后,都应当调用它。必须调用它,否则后端可能与前端“失去同步”。该函数返回后,后端就准备好接收下一条命令了。

    成功完成时返回值为 0,否则为非零。

例如:

PgDatabase data;
data.Exec("CREATE TABLE foo (a int4, b char(16), d double precision)");
data.Exec("COPY foo FROM STDIN");
data.PutLine("3\tHello World\t4.5\n");
data.PutLine("4\tGoodbye World\t7.11\n");
...
data.PutLine("\\.\n");
data.EndCopy();

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。