27.7. �첽֪ͨ

PostgreSQL ͨ��LISTEN��NOTIFY�����ṩ���첽֪ͨ��֧�֡� һ����������LISTEN����ע��һ��������Ȥ��֪ͨ���� ��Ҳ������UNLISTEN����ֹͣ�������� �������ڼ���ijһ֪ͨ�����ĻỰ�ڸ��������� NOTIFY��֪ͨ�����κλỰִ�к󶼽����첽��֪ͨ�� ֪ͨ�����߲��ᴫ�ݸ��ӵ���Ϣ�������ߡ���ˣ��ܵ��͵��ǣ� �κ�ʵ�ʵ���Ҫ�����ݵ����ݶ���ͨ��һ�����ݿ���ݵġ� ͨ������������������ı�ͬ�������Dz�����һ��Ҫ��ij������ز��С�

libpq Ӧ�ð�LISTEN�� UNLISTEN ������Ϊͨ���� SQL �����ύ�� ���ͨ������PQnotifies()������⵽ NOTIFY ��Ϣ�ĵ��

����PQnotifies ��һ�����Է�������δ�����֪ͨ��Ϣ�б��з�����һ��֪ͨ�� ���û��δ�������Ϣ�򷵻� NULL ָ�롣 һ��PQnotifies����һ��֪ͨ�� ��֪ͨ�ᱻ��Ϊ�Ѵ����ҽ�����֪ͨ�б���ɾ����

PGnotify *PQnotifies(PGconn *conn);

typedef struct pgNotify {
    char *relname;		   /* ֪ͨ����*/
    int  be_pid;		   /* ���������� id*/
    char *extra;                /* ֪ͨ���� */
} PGnotify;

�ڴ����� PQnotifies ���ص�PGnotify����� ��������PQfreemem() �����ͷţ��Ա����ڴ�й©�� �ͷ� PGnotify ָ����㹻�ˣ�relname �� extra �ֶβ�δ�������������ڴ档��Ŀǰ��extra �ֶ�û��ʹ�ã� ���ҽ�����ָ��һ�����ִ�����

ע��: �� PostgreSQL 6.4 �͸��ߵİ汾� be_pid ������֪ͨ�ķ������� PID�� ������Щ�İ汾�����������Լ��ķ�������PID��

Example 27-2 ������һ��ʹ���첽֪ͨ�����ӡ�

PQnotifies() ʵ���ϲ�����ȡ���������ݣ� ��ֻ�Ƿ��ر�ǰ�����һ��libpq�������յ���Ϣ�� ����ǰ�� libpq �İ汾� �����Ե��յ�NOTIFY��Ϣ��Ψһ�����dz������ύ��� ��ʹ�ǿղ�ѯҲ���ԣ�������ÿ�� PQexec()���� PQnotifies() �������������Ҳ�ܻ������� ����������Ϊ��̫�˷Ѵ�����ʱ�������������

����û�п��õ������ύʱ���NOTIFY��Ϣ�ĸ��õķ����ǵ��� PQconsumeInput()��Ȼ���� PQnotifies()�������ʹ�� select() ���ȴ����������ݵĵ�� ������û�����ݿɴ���ʱ���Բ��˷� CPU ʱ�䡣 ������PQsocket() ��ȡ���� select()���ļ����������� ע�����ַ���������ʹ�� PQsendQuery/PQgetResult ���Ǽ򵥵� PQexec��ִ������ܹ�������������Ӧ�ü�ס��ÿ�� PQgetResult �� PQexec���� PQnotifies() �������ڴ�������Ĺ������Ƿ���֪ͨ���