27.10. ע����Ϣ����

���������ɵ�ע����Ϣ�;�����Ϣ�������ɲ�ѯִ�к������أ���Ϊ���Dz����̺����ѯ��ʧ�ܡ� ���ǻᱻ���ݸ�һ��ע����Ϣ��������Ȼ���ڸô�����֮���������ִ�С� ȱʡ��ע����Ϣ�������� stderr �ϴ�ӡ����Ϣ������Ӧ�ÿ���ͨ���ṩ�Լ��Ĵ����������������Ϊ��

��ԥ��ʷԭ��ϵͳ��������������ע����Ϣ���� �ֱ����ע����Ϣ��������ע����Ϣ��������ȱʡ����Ϊ��ע����Ϣ��������ʽ��ע����ϢȻ���ע����Ϣ����������һ���ִ����д�ӡ�� �������������д�����Щ�����Ӧ�ö��ԣ�ͨ���Ǻ���ע����Ϣ�������㣬��ֻ����ע����Ϣ��������������ж�����

���� PQsetNoticeReceiver Ϊһ�����Ӷ������û��߼�鵱ǰ��ע����Ϣ�������� ���Ƶ��� PQsetNoticeProcessor ���û��߼�鵱ǰ��ע����Ϣ��������

typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res);

PQnoticeReceiver
PQsetNoticeReceiver(PGconn *conn,
                    PQnoticeReceiver proc,
                    void *arg);

typedef void (*PQnoticeProcessor) (void *arg, const char *message);

PQnoticeProcessor
PQsetNoticeProcessor(PGconn *conn,
                     PQnoticeProcessor proc,
                     void *arg);

��Щ����������ǰһ��ע����Ϣ���������ߴ���������ָ�룬Ȼ�������µ���ֵ�� ������ṩһ���պ���ָ�룬��ô�Ͳ���ִ���κζ��������Ƿ��ص�ǰָ�롣

�����Ǵӷ�������ȡһ��ע����߾�����Ϣ��ʱ�򣬻������յ� libpq �ڲ����ɵ�������Ϣʱ��ע����Ϣ�����������������á���Ϣ����һ�� PGRES_NONFATAL_ERROR �� PGresult ����ʽ���ݡ�����������������PQresultErrorField��ȡ�������ֶΣ� ������ PQresultErrorMessage ���Ԥ�ȸ�ʽ���õ���Ϣ���� ���ݸ� PQsetNoticeReceiver ��ͬһ�� void ָ��Ҳͬ�����ݸ��ú����� ����Ҫʱ�����ָ�������������Ӧ����ص�״̬����

ȱʡ��ע����Ϣ������ֻ�Ǽ򵥵ij�ȡ��Ϣ��ʹ�� PQresultErrorMessage��Ȼ�󴫵ݸ�ע����Ϣ��������

ע����Ϣ������������һ�����ı���ʽ������ע����߾�����Ϣ�� ϵͳ���ݸ�����Ϣ���ִ��ı���������β�����з���������һ���ʹ��ݸ� PQsetNoticeProcessor һ���� void �������ͣ�ָ�롣����Ҫʱ�����ָ�������������Ӧ����ص�״̬����

ȱʡ��ע����Ϣ����������

static void
defaultNoticeProcessor(void *arg, const char *message)
{
    fprintf(stderr, "%s", message);
}

һ����������ע����Ϣ���������ߴ���������ô���Ӧ��׼������ PGconn ������� PGresult ����ʼ���ڵ�ʱ��������˵������ǡ��ڴ��� PGresult ��ʱ�� PGconn �ĵ�ǰע����Ϣ����ָ�뱻������ PGresult���Ա㱻���� PQgetvalue �����ĺ���ʹ�á�