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

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

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

41.6. 与 COPY 命令相关的函数

Postgres 中的 copy 命令可以选择从 libpq 所用的网络连接读取或向其写入。因此,需要能直接访问此网络连接的函数,应用才能充分利用这一能力。

  • PQgetline 把一行由后端服务器传来的以换行符结尾的字符读入大小为 length 的缓冲区字符串。与 fgets(3) 一样,此例程最多把 length-1 个字符复制到 string 中;但与 gets(3) 相似,它会把结尾的换行符转换为空字符。 PQgetline 在 EOF 处返回 EOF,整行已读完返回 0,缓冲区已满但结尾换行符尚未读到返回 1。 注意,应用必须检查新的一行是否由单个字符 "." 组成,这表示后端服务器已发送完 copy 命令的结果。因此,如果应用可能收到超过 length-1 个字符的行,就必须非常仔细地检查 PQgetline 的返回值。 ../src/bin/psql/psql.c 中的代码包含正确处理 copy 协议的例程。

    int PQgetline(PGconn *conn,
                  char *string,
                  int length)
    
  • PQputline 向后台服务器发送一个以空字符结尾的字符串。 应用必须显式发送单个字符 ".",以告知后端它已发送完数据。

    void PQputline(PGconn *conn,
                   char *string);
    
  • PQendcopy 与后端同步。此函数等待后端完成 copy。它应当在用 PQputline 向后端发送完最后一个字符串之后,或用 PGgetline 从后端收到最后一个字符串之后发出。必须发出此函数,否则后端可能与前端"out of sync"(失去同步)。从此函数返回后,后端就准备好接收下一条查询了。成功完成时返回值为 0,否则非零。

    int PQendcopy(PGconn *conn);
    
    PQexec(conn, "create table foo (a int4, b char16, d float8)");
    PQexec(conn, "copy foo from stdin");
    PQputline(conn, "3<TAB>hello world<TAB>4.5\n");
    PQputline(conn,"4<TAB>goodbye world<TAB>7.11\n");
    ...
    PQputline(conn,".\n");
    PQendcopy(conn);
    

提交更正

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