PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 27. libpq - C �� | Fast Forward | Next |
һ�������ݿ�����������ӳɹ���������������������ĺ���ִ�� SQL ��ѯ�����
���ǿ������������ִ��������� SQL ����÷ֺŷָ�������һ�� PQexec �����з��͵Ķ����ѯ����һ�������ﴦ��ģ������ڲ�ѯ�ִ�������ȷ�� BEGIN/COMMIT �������ڰ������ִ��ָ��ɶ��������ע���������ص� PGresult �ṹֻ�����ִ���ִ�е����һ������Ľ���� �����һ������ʧ�ܣ���ô�ִ�����Ĺ��̾ͻ�ֹͣ���ҷ��ص� PGresult ����������������
��������ύһ������ҵȴ���������ж���Ĵ����� SQL �����ı������IJ�����������
PGresult *PQexecParams(PGconn *conn, const char *command, int nParams, const Oid *paramTypes, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat);
PQexecParams ���� PQexec�������ṩ�˶���Ĺ��ܣ� ����ֵ���Զ���������������������ҿ���Ҫ���ѯ����ĸ�ʽ���ı����߶����Ƹ�ʽ�� PQexecParams ֻ����Э�� 3.0 �Լ��Ժ�İ汾��֧�֣���ʹ�� 2.0 �İ汾��ʱ���ʧ�ܡ�
���ʹ���˲�������ô�������� $1��$2���ȵ��������ִ������õġ� nParams ���ṩ�IJ����ĸ������������� paramTypes[]�� paramValues[]��paramLengths[]���� paramFormats[] �ij��ȡ� ����� nParams ���㣬��ô����ָ������� NULL���� paramTypes[] �� OID ����ʽ�����˸���������ŵ��������͡� ��� paramTypes �� NULL����������������Ԫ�����㣬 ��ô����������Ӧ�IJ������Ÿ�����������ı���һ�����������͡� paramValues[] �����ò�����ʵ����ֵ����������еĿ�ָ����ζ�Ŷ�Ӧ�IJ����ǿգ� �������ָ��ָ��һ�������β���ı��ִ����ı���ʽ�����߷������ڴ��ĸ�ʽ�Ķ��������ݣ����ڶ����Ƹ�ʽ���� paramLengths[] ���������Ƹ�ʽ������ʵ�����ݳ��ȡ� ���ڿղ������ı���ʽ�IJ��������������������û�ж����Ʋ�������ô�������ָ������ǿա� paramFormats[] ����ij���������ı����������з�һ���㣩���Ƕ����ƣ��������з�һ��1���� ����������ָ���ǿգ���ô���в�������Ϊ���ı��ġ� resultFormat Ϊ�����ȡ���ı���ʽ���صĽ����Ϊһ���ȡ�Զ�������ʽ���صĽ���� ��Ŀǰ���ܹ涨�Ӳ�ͬ���ֶλ�ȡ��ͬ��ʽ�Ľ�������ܶ��²��Э���ǿ��ܵġ���
PQexecParams �� PQexec ����Ҫ�����������ǿ��Ժ�����ֿ���������ֵ�� �����Ϳ��Ա���������IJ��Һ����׳������������ݡ� �� PQexec ��ͬ���ǣ�PQexecParams ��һ���������ִ����������һ�� SQL ��� ����������зֺţ����Dz��ó���һ���ǿյ�����������²��Э���һ�����ƣ� ����Ҳ��Щ����ĺô����������������һ���ֹ SQL ע�乥���IJ�Ρ�
�ø����IJ����ύ������һ�����õ���䣬Ȼ��ȴ�������
PGresult *PQprepare(PGconn *conn, const char *stmtName, const char *query, int nParams, const Oid *paramTypes);
PQprepare ����һ��Ϊ���� PQexecPrepared ִ���õ�������䡣 �������������Щ�ظ�ʹ�õ����ֻ�����滮һ�Σ�������ÿ��ִ�ж������滮�� ����������ڵ�ǰ�Ự��ǰ���Ѿ����á� ֻ����Э�� 3.0 ���Ժ��������֧�� PQprepare����ʹ�� 2.0 Э���ʱ������ʧ�ܡ�
��������� query �ִ��ﴴ��һ���� stmtName �����õ���䣬 query ����ֻ����һ�� SQL ���stmtName ������ ""�� �����ʹ���һ����������䣬��������£��κ�ǰ����ڵ�������䶼���Զ������棻 �������������Ѿ��ڵ�ǰ�Ự�ﶨ�壬�Ǿ���һ������ ���ʹ���˲�������ô�ڲ�ѯ���������ó� $1��$2 �ȵȡ� nParams �Dz����ĸ��������������������� paramTypes[] �������������ˡ� ����� nParams ���㣬��ô�������ָ������� NULL���� paramTypes[] �� OID �ķ�ʽ������������Ź������������͡� ��� paramTypes Ϊ NULL������������ij���ض�Ԫ�����㣬 ��ô���������ô����������ı�ͬ���ķ���������������Ÿ����������͡� ���У���ѯ����ʹ�ñ� nParams ��ֵ����IJ������ű�ţ� ��Щ��������������Ҳ����һ���ķ����Ƶ��ġ�
�� PQexec ���ƣ����ͨ����һ�� PGresult ���� �����ݱ������������dzɹ�����ʧ�ܡ��յĽ����ʾ�ڴ�ľ�������ȫ���ܷ������ ʹ�� PQerrorMessage ��ȡ�й��������ĸ�����Ϣ��
Ŀǰ��û���κη������������ǵõ����Ƶ���������Щ paramTypes[] ����û����������֮������ʵ���������͡� ���� libpq ��һ�����ԣ������汾���ܻ������㡣
���� PQexecPrepared ���������Ҳ����ͨ��ִ�� SQL PREPARE ����������� ������ PQprepare ������Ϊ����Ҫ��Ԥ�������������͡��� ���У�����û�� libpq ��������ɾ��һ��������䣬 SQL DEALLOCATE ���ȴ����ɾ����
����һ������ִ��һ�����и������������õ���䣬���ҵȴ������
PGresult *PQexecPrepared(PGconn *conn, const char *stmtName, int nParams, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat);
PQexecPrepared �� PQexecParams ���ƣ� ����Ҫִ�е�������ͨ������һ��ǰ�����õ���������ģ������Ǹ���һ����ѯ�ִ��� �������������ЩҪ�ظ�ʹ�õ�����ֻ����һ�η����滮��������ÿ��ִ�ж���һ�顣 PQexecPrepared ֻ��Э�� 3.0 ���Ժ�İ汾��֧�֣���ʹ�� 2.0 �汾��Э���ʱ�����ǻ�ʧ�ܡ�
������ PQexecParams һ����ֻ�Ǹ�������һ�������������֣�������һ����ѯ�ִ��� ����û�� paramTypes[] ������û��Ҫ����Ϊ�������IJ����������ڴ�����ʱ��ȷ���ģ���
PGresult �ṹ��װ�˷��������صĽ����libpq Ӧ��С��ά�� PGresult �ij��� ʹ������ķ��ʺ�����ȡ PGresult �����ݡ�����ֱ������ PGresult ������ֶΣ� ��Ϊ������δ���汾����ܻᱻ�ġ�
��������Ľ��״̬��
ExecStatusType PQresultStatus(const PGresult *res);
PQresultStatus���Է���������ֵ֮һ��
�������������ִ��ǿյ�
�ɹ����һ�����������ݵ�����
�ɹ�ִ��һ���������ݵIJ�ѯ��ѯ������ SELECT ���� SHOW����
���ӷ�������Copy Out �������������ݴ��俪ʼ
Copy In �������룩���������������ݴ��俪ʼ
����������Ӧ�����
������һ������������֪ͨ���߾��棩
������һ����������
������״̬�� PGRES_TUPLES_OK�� ��ô����������ĺ����Ӳ�ѯ�ķ����г�ȡԪ����Ϣ�� ע��һ�����ɼ���������Ԫ���SELECT��Ȼ��ʾ PGRES_TUPLES_OK�� PGRES_COMMAND_OK���ڲ�����Ԫ������INSERT��UPDATE���ȣ��� ���� PGRES_EMPTY_QUERY ����Ӧͨ����ζ�ű�¶�˿ͻ����������ij��档
״̬Ϊ PGRES_NONFATAL_ERROR �Ľ����Զ����ֱ���� PQexec ����������ѯִ�к������أ�����Ľ���ᱻ���ݸ�֪ͨ������������ Section 27.10����
��PQresultStatus���ص�ö������ת����һ������״̬����ַ��������� �����߲�Ӧ���ͷŽ����
char *PQresStatus(ExecStatusType status);
�������ѯ�����Ĵ�����Ϣ������û�д���ʱ����һ�����ַ�����
char *PQresultErrorMessage(const PGresult *res);
����д�����ô���ص��ִ�������һ����β�����С� �����߲�Ӧ��ֱ���ͷŽ��������ص� PGresult ������ݸ� PQclear ֮�������Զ��ͷš�
������һ�� PQexec �� PQgetResult ���ú��棬PQerrorMessage �������ӣ��������� PQresultErrorMessage ���Խ����һ�����ַ����� ������һ��PGresult�������������Ϣֱ����ɾ���� ������Ĵ�����Ϣ���ں����IJ������ʱ���ı䡣������֪����ij�� PGresult�������״̬ʱ�� PQresultErrorMessage��������֪�������ӵ����һ�������������״̬ʱ�� PQerrorMessage��
����һ�������Ĵ����ֶΡ�
char *PQresultErrorField(const PGresult *res, int fieldcode);
fieldcode ��һ�������ֶα�ʶ�������������г��ķ��š� ��� PGresult ���Ǵ�����߾��������߲�����ָ�����ֶΣ���ô���� NULL�� �ֶ�ֵͨ������������β�����С������߲�Ӧ��ֱ���ͷŽ���� ��������� PGresult ������ݸ� PQclear ֮���������Զ��ͷš�
���д����ǿ��õģ�
���س̶ȣ�����ֶε������� ERROR��FATAL������ PANIC���ڴ�����Ϣ������� WARNING��NOTICE�� DEBUG��INFO������ LOG����ע����Ϣ��� ��������Щ������һ�����ػ����롣���dz��֡�
�������� SQLSTATE ���롣SQLSTATE �����ʾ�������Ĵ�������ͣ� ������ǰ��Ӧ�����ڶ��ض������ݿ����ִ���ض��IJ���������������� ���ڿ��ܵ� SQLSTATE ������б������ Appendix A�� ����ֶ��Dz������ģ��������dz��֡�
��Ҫ������ɶ�����Ϣ��ͨ���������������dz��֡�
ϸ�ڣ�һ����ѡ�Ĵ���������Ϣ�������и����йظ������ϸ�ڡ������ж��С�
��ʾ��һ����ѡ���й���δ��������Ľ��顣 ����ϸ�ڵ����������ṩ�˽��飨���ܲ�̫���ʣ�����������ʵ�������кü��С�
һ������ʮ�����������ִ�������һ�������α�ʹ�ã�ָ���������䴮����ĵط����±ꡣ ��һ���ַ��������� 1���������λ�������ַ��ƣ����������ֽڼơ�
����� PG_DIAG_STATEMENT_POSITION �ֶζ�����һ���ģ� �������������ڲ����ɵ�������±�ָʾ�������ǿͻ����ύ����� �������������ֶΣ���ô PG_DIAG_INTERNAL_QUERY �ֶ�Ҳ���dz��֡�
һ��ʧ�ܵ��ڲ����ɵ�������ı��� ���磬���������һ�� PL/pgSQL ���������� SQL ��ѯ��
һ��ָʾ���������������Ļ�����Ŀǰ���������Ծ�Ĺ������Ժ������ڲ����ɵIJ�ѯ�ĵ��ö�ջ�� ��ջ��ÿ��һ��������������档
������Ĵ����Դ����λ�õ������ļ���
���������������ڵ�Դ����λ�õ��кš�
������������Դ���뺯�������֡�
���������Ҫ���ʽ����ʾ��Ϣ�ǿͻ��˵����Σ��ر��Ǹ�����Ҫ�Գ��н������С� �ڴ�����Ϣ�ֶ�����ֵ������ַ�Ӧ�õ����ֶη��ţ������ǻ��С�
libpq ���ɵĴ����������Ժ�����Ϣ�� ����ͨ��û�������ֶΡ�3.0 Э��֮ǰ���صĴ����������Ժ�����Ϣ�� ��ʱ������ϸ��Ϣ������û�������ֶΡ�
��ע����Щ�����ֶ�ֻ�ܴ� PGresult �������ã� ������ PGconn ����û�� PQerrorField ������
PQclear �ͷ���PGresult������Ĵ洢�ռ䡣 �κβ�����Ҫ�IJ�ѯ����ڲ���Ҫ��ʱ��Ӧ����PQclear�ͷŵ���
void PQclear(PGresult *res);
ֻҪ����Ҫ������Ա���PGresult�������ⳤ��ʱ�䣻 �����ύ�µIJ�ѯʱ��������ʧ��������Ͽ����Ӻ�Ҳ�������� Ҫɾ�������������� PQclear������ô�����������Ӧ���е��ڴ�й©��
����һ�����и�����״̬�ģ��յ�PGresult����
PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
����libpq���ڲ������� ���ڷ���ͳ�ʼ��һ����PGresult���� �����������ΪһЩӦ����Ҫ�������ɽ�������������ض��Ĵ��д���״̬�Ķ��� ���conn�ǿգ�NULL������״ָ̬ʾһ������ ���ӵ�ǰ�Ĵ�����Ϣ��������PGresult�� ע�����նԸö�����Ҫ����PQclear�� ����libpq�����ص�PGresultһ����
��Щ�������ڴ�һ�������ųɹ���ѯ�����Ҳ����˵��״̬Ϊ PGRES_TUPLES_OK �IJ�ѯ�� �� PGresult ����������״ֵ̬�Ķ������ǵ���Ϊ��������������к�����һ����
���ز�ѯ�������У�Ԫ�飩������
int PQntuples(const PGresult *res);
���ز�ѯ����������е��������ֶΣ��ĸ�����
int PQnfields(const PGresult *res);
���������������������������������ֶΣ������ơ��������Ŵ� 0 ��ʼ�� �����߲�Ӧ��ֱ���ͷŽ������������� PGresult ������ݸ� PQclear ֮����ᱻ�Զ��ͷš�
char *PQfname(const PGresult *res, int column_number);
����ֶα�ų�����Χ����ô����NULL��
�����������������������������������ֶΣ��ı�š�
int PQfnumber(const PGresult *res, const char *column_name);
������������ֲ�ƥ���κ��ֶΣ����� -1��
�����������ǵ��� SQL �������һ����ʶ�������ģ�Ҳ����˵�����û�м�˫���ţ� ��ô��ת��ΪСд�����磬���������һ���� SQL ���������ɵIJ�ѯ���
select 1 as FOO, 2 as "BAR";
��ô���ǻ�������Ľ����
PQfname(res, 0) foo PQfname(res, 1) BAR PQfnumber(res, "FOO") 0 PQfnumber(res, "foo") 0 PQfnumber(res, "BAR") -1 PQfnumber(res, "\"BAR\"") 1
��������ץȡ���ֶ����ڵı�� OID���ֶα�Ŵ� 0 ��ʼ��
Oid PQftable(const PGresult *res, int column_number);
����ֶα�ų����˷�Χ�������������ֶβ���һ��ָ��ij������ֶεļ����ã� ����ʹ���� 3.0 �汾֮ǰ��Э�飬��ô�ͻ᷵�� InvalidOid�� ����Բ�ѯϵͳ�� pg_class ���жϾ����������ĸ���
������� libpq ͷ�ļ���ʱ�� �ͻᶨ������ Oid �ͳ��� InvalidOid�� ���Ƕ�����ͬ���������͡�
������������IJ�ѯ����ֶε��ֶκţ������ı��ڲ�������ѯ����ֶα�Ŵ� 0 ��ʼ�����DZ��ֶα�Ų����� 0��
int PQftablecol(const PGresult *res, int column_number);
����ֶα�ų�����Χ�������������ֶβ�����һ�����ֶεļ����ã�����ʹ�õ��� 3.0 ֮ǰ��Э�飬��ô�����㡣
����˵�������ֶεĸ�ʽ�ĸ�ʽ���롣�ֶα�Ŵ� 0 ��ʼ��
int PQfformat(const PGresult *res, int column_number);
��ʽ��Ϊ 0 ��ʾ�ı����ݣ�����ʽ����һ��ʾ���������ݡ����������뱣�����������塣��
����������������Ź��������������͡� ���ص�������һ�������͵��ڲ� OID �š��������Ŵ�0 ��ʼ��
Oid PQftype(const PGresult *res, int column_number);
����Բ�ѯϵͳ�� pg_type �Ի�ȡ�����������͵����ƺ����ԡ� �ڽ����������͵� OID ��Դ������ src/include/catalog/pg_type.h �ļ��ﶨ�塣
����������ֶα����������������δʡ� �ֶα�Ŵ� 0 ��ʼ��
int PQfmod(const PGresult *res, int column_number);
�������η���ֵ��������صģ�����ͨ���������Ȼ��߳ߴ����ơ���ֵ -1 ���ڱ�ʾ"û�п�����Ϣ"�� ������������Ͳ������δʣ���������¸�ֵ���� -1��
����������ֶα�Ź������ֶ����ֽڼƵĴ�С�� �ֶα�Ŵ�0 ��ʼ��
int PQfsize(const PGresult *res, int column_number);
PQfsize���������ݿ���������������ֶη���Ŀռ䣬 ���仰˵���Ǹ����������ڷ�������Ķ�������ʽ�Ĵ�С���ߴ磩�� ����ˣ�����Կͻ���û��ʲô�á��� ������������ǿɱ�ߴ磬���� -1��
���PGresult����������Ԫ������ʱ���� 1�� ������� ASCII ���ݷ��� 0��
int PQbinaryTuples(const PGresult *res);
��������Ѿ������ˣ����˻������� COPY ����֮�⣩����Ϊ���ǿ�����һ�� PGresult ��ijЩ�ֶ�������ı����ݣ�������һЩ�ֶΰ������������ݡ� ���õ���ʹ�� PQfformat�� PQbinaryTuples ֻ���ڽ���е������ֶζ��Ƕ����ƣ���ʽ 1����ʱ��ŷ��� 1��
����һ��PGresult ����һ�еĵ�����һ���ֶε�ֵ�� �к��ֶα�Ŵ� 0 ��ʼ�������߲�Ӧ��ֱ���ͷŽ�����ڰ� PGresult ������ݸ� PQclear ֮����ᱻ�Զ��ͷš�
char *PQgetvalue(const PGresult *res, int row_number, int column_number);
�����ı���ʽ�����ݣ� PQgetvalue ���ص�ֵ��һ����ʾ�ֶ�ֵ�Ŀգ�NULL����β���ַ����� ���ڶ����Ƹ�ʽ�� ���ص�ֵ�����ɸ��������͵� typsend �� typreceive �����Ķ����Ʊ�����ʽ�� ������������£���ֵʵ����Ҳ����һ���ֽ��㣬����ͨ������ֽ�ûʲô�ô�����Ϊ��ֵ����ܿ��ܰ�����Ƕ�Ŀա���
����ֶ�ֵ�ǿգ���һ�����ִ������� PQgetisnull �������ֵ�Ϳ��ִ�ֵ��
PQgetvalue ���ص�ָ��ָ��һ�������� PGresult�ṹ��һ���ֵĴ洢�������Dz��ܸ������� �����������Ҫ��PGresult�ṹ�������ں�Ҫʹ�����Ļ��� ���DZ�����ȷ�ذѸ���ֵ�����������洢���С�
����һ���ֶ��Ƿ�Ϊ�գ�NULL�����к��ֶα�Ŵ� 0 ��ʼ��
int PQgetisnull(const PGresult *res, int row_number, int column_number);
���������� NULL���������� 1����������ǿգ�non-null ��ֵ������ 0�� ��ע�⣬��һ�� NULL ������PQgetvalue ������һ�����ַ����� ����һ����ָ�롣��
�������ֽڼƵ��ֶεij��ȡ��к��ֶα�Ŵ� 0 ��ʼ��
int PQgetlength(const PGresult *res, int row_number, int column_number);
����ijһ�ض�����ֵ��ʵ�����ݳ��ȡ� �к��ֶα�Ŵ� 0 ��ʼ��
int PQgetlength(const PGresult *res, int row_number, int column_number);
�����ض���ֵ��ʵ�����ݳ��ȣ�Ҳ����˵��PQgetvalue ָ��Ķ���Ĵ�С�� �����ı����ݸ�ʽ������ strlen() ��ͬ�����ڶ����Ƹ�ʽ������DZ�ڵ���Ϣ�� ��ע��������Ӧ������ PQfsize ��ȡʵ�����ݳ��ȡ�
��ָ�����������ӡ���е��кͣ���ѡ�ģ��ֶ����ơ�
void PQprint(FILE *fout, /* ����� */ const PGresult *res, const PQprintOpt *po); struct { pqbool header; /* ��ӡ�����ͷ���м��� */ pqbool align; /* ��������ֶ� */ pqbool standard; /* �ɵ�ɵ��ʽ */ pqbool html3; /* ��� HTML �� */ pqbool expanded; /* ��չ�� */ pqbool pager; /* ��Ҫʱ�������ʹ�÷�ҳ�� */ char *fieldSep; /* �ֶηָ��� */ char *tableOpt; /* �� HTML �в��� table ... */ char *caption; /* HTML caption */ char **fieldName; /* �滻�ֶ�����ɵĿ����β������ */ } PQprintOpt;
���������ǰ�� psql ���ڴ�ӡ��ѯ��������������Ѿ�������������ˡ���ע�����������е����ݶ����ı���ʽ��
��Щ�������ڴ� PGresult �����������Щ�� SELECT �������Ϣ��
���ز���PGresult�� SQL ���������״̬�ַ�����
char *PQcmdStatus(PGresult *res);
ͨ����ֻ����������֣����������ܰ�����������ݣ����紦����������� �����߲�Ӧ���ͷŽ����������ڰ� PGresult ������ݸ� PQclear ��ʱ���ͷš�
���ر� SQL ����Ӱ����е�������
char *PQcmdTuples(PGresult *res);
�����������һ��������� PGresult ����� SQL ���Ӱ����������ִ��� �������ֻ������ INSERT��UPDATE��DELETE��MOVE�� ���� FETCH ���ִ��֮��Ľ����������һ������ INSERT��UPDATE�� ���� DELETE ��� EXECUTE ��һ�����õIJ�ѯ�� ���������� PGresult �������������Ķ�������ô PQcmdTuples ����һ�����ִ��� �����߲�Ӧ��ֱ���ͷŷ��ص���ֵ����������� PGresult �����ݸ� PQclear ֮�����ᱻ�Զ��ͷš�
����һ��������еĶ����ʶ��OID������ ���SQL ������INSERT��������һ���������� INSERT �������õ� EXECUTE��ʱ���������� InvalidOid������� INSERT Ӱ��ı����� OID�� Ҳ���� InvalidOid��
Oid PQoidValue(const PGresult *res);
��� SQL ������INSERT�����߰������� INSERT ��������� EXECUTE �ˡ�����һ����������е� OID ���ִ��� ����� INSERT ����ǡ�ò���һ�У�����Ŀ���û��OID����ô�ִ����� 0���� ��������INSERT����һ�����ִ���
char *PQoidStatus(const PGresult *res);
��������Ѿ������ˣ���Ϊ���� PQoidValue��������Ҳ�����̰߳�ȫ�ġ�
PQescapeStringΪ�� SQL ������ʹ���ִ�����֮�������ݴ��� �������� SQL �����������ֵ�����ı����������ʱ������á���Щ�ַ������絥���źͷ�б�ܣ����뱻���ݣ� �Ա������DZ� SQL ��������Ϊ�����ַ�������PQescapeString ִ�����������
��ʾ: ������Ǵ�һ�������ŵ���Դ�յ�һ���ִ��Ļ�����ô��ǡ�������ݾ���Ҫ�ˡ� ������а�ȫ��Σ�գ�����յ�"SQL ע��"���������ʱ������㲻�뿴���� SQL ι��������ݿ⡣
��ע�⣬���һ������ֵ����Ϊ PQexecParams ����ͬ�庯����һ�������������ݵģ� ��ô���ݾͼȲ���Ҫ��Ҳ����ȷ��
size_t PQescapeString (char *to, const char *from, size_t length);
���� from ָ��Ҫ���ݵ��ִ��ĵ�һ���ַ��� length ��������������ִ�����ַ��������ִ���β���ֽ��㲻�DZ���ģ�Ҳ������ length�� ������ڴ��� length ���ֽ�֮ǰ������һ���ֽ��㣬 ��ô PQescapeString ������ֽ��㴦ֹͣ�� �����Ϊ���� strncpy���� to Ӧ��ָ��һ������������������������ܱ��� length ��ֵ����������һ�����ַ�������ú�����Ϊ������Ԥ�⡣ ���� PQescapeString �ͻ�����ݵ� from �ִ�ת���� to ���������������ַ��������ǵ����κ����⣬ ��������ֹ���ֽ��㡣��Щ�����Χ��PostgreSQL �ִ��ı���Χ�ĵ����Ų������ִ���һ���֣���Ӧ���ڰѵ����ŷ��ڲ��������������SQL������Χ��
PQescapeString ����д�� to ������ַ���Ŀ�� ��������β���ֽ��㡣
��� to �� from �ִ���ص�����ô����Ϊ����Ԥ�⡣
������Щ�� SQL ������ʹ�õ��� bytea ��ʾ�Ķ��������ݡ� �� PQescapeString һ�����������ֻ����ֱ���� SQL �ִ��������ݵ�ʱ��ʹ�á�
unsigned char *PQescapeBytea(const unsigned char *from, size_t from_length, size_t *to_length);
�� SQL ��������� bytea �ִ��ı���һ���ֵ�ʱ�� ��Щ�ֽ�ֵ�������ݣ����Ƕ��������ֽڶ������������ݣ��� ͨ����Ҫ����һ���ֽڣ����DZ�ת����һ����λ�˽������֣� ��������ֵ���ڸ��ֽڵ���ֵ��Ȼ��ǰ������б�ܡ� �����ţ�'���ͷ�б���ַ���\�����Լ�������������С����� Section 8.4 ��ȡ������Ϣ�� PQescapeBytea ִ�������������ֻ������Ҫ���ݵ����ٵ��ַ���
from ����ָ����Ҫ���ݵ��ִ��ĵ�һ���ֽڣ� from_length ������ӳ������������ִ�����β���ֽ���Ȳ���ҪҲ���������ڵ��ִ������ֽڵĸ����� to_length ����Ӧ����һ��ָ��ij����������ָ�룬 ���Ŀռ�Ӧ���ܹ��������ݺ�Ľ���ִ����ȡ� ����ִ����Ȳ����������β���ֽ��㡣
PQescapeBytea ���ڴ��ط���һ�� from �����Ķ������ִ������ݺ�İ汾����Ƭ�ڴ����� malloc() ����ģ� �ڽ��������Ҫ��ʱ������ PQfreemem() �ͷš� ���ص��ִ��Ѿ�������������ַ��滻���ˣ��������ǾͿ����� PostgreSQL���ִ��ı��������Լ� bytea �����뺯����ȷ�ش��� ͬʱ������һ����β���ֽ��㡣��Щ�����Χ�� PostgreSQL�ִ��ı���Χ�ĵ����Ų������ִ���һ���֡�
��һ�����������ݵ����ݺ���ִ�������ʽת���ɶ��������� — PQescapeBytea �ķ����á� �����ı���ʽ��ȡ bytea ���ݵ�ʱ���DZ���ģ� �������Զ����Ƹ�ʽ��ȡ��ʱ���Dz���Ҫ�ġ�
unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
from ����ָ��һ�����ݺ���ִ��� ���� PQgetvalue �����һ�� bytea �ֶκصġ�PQunescapeBytea �������ִ�������ʽת���ɶ�������ʽ�� ������һ���� malloc() �����ָ��û�������ָ�룬 �����dz���ʱ���ؿգ��������ijߴ���� to_length � �ڲ�����Ҫ������֮����Ƭ�ڴ������ PQfreemem() �ͷš�
�ͷ� libpq ������ڴ档
void PQfreemem(void *ptr);
�ͷ��� libpq ������ڴ棬 �ر��� PQescapeBytea��PQunescapeBytea�� �� PQnotifies������ Microsoft Windows ����ģ� ��Ϊ�����ܿ�Խ DLL �ͷ��ڴ棬����ʹ���˶��̵߳� DLL ��VC6 �е� /MD���� ������ƽ̨�ϣ���������ͱ��Ŀ⺯��free()һ����