pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
Postgres 中的 copy 命令有一些选项,可以读取或写入 libpq++ 所使用的网络连接。 因此,需要一些函数来直接访问这个网络连接,使应用可以充分利用这一能力。
PgDatabase::GetLine 把后端服务器传输的一行以换行符结尾的字符读入大小为 length 的缓冲区 string。
int PgDatabase::GetLine(char* string, int length)
与 Unix 系统例程 fgets (3) 一样,此例程最多复制 个字符到 length-1string。但它又像 gets (3),会把结尾的换行符转换为一个空字符。
PgDatabase::GetLine 在文件末尾返回 EOF,整行已读取时返回 0,而缓冲区已满但尚未读到终止换行符时返回 1。
注意,应用程序必须检查新行是否由单个句点(".")组成,这表示后端服务器已经完成了 copy 结果的发送。 因此,如果应用预期会收到长度超过 个字符的行,务必非常仔细地检查 length-1PgDatabase::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 float8)");
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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。