PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 43. PostgreSQL Դ���� | Fast Forward | Next |
�ڷ��������������ɵĴ������Լ���־��ϢӦ���� ereport������������ǰ�� elog ������ ���������ʹ���Ѿ����ӵ��㹻������Щ�����ˡ�
ÿ����Ϣ�������������Ҫ�أ�һ�����ؼ��𣨷�Χ�� DEBUG �� PANIC����һ����Ҫ��Ϣ�ı��� ����֮��п�ѡ��Ԫ�أ�����ľ���һ����ѭ SQL ���� SQLSTATE ϰ�ߵĴ����ʶ�롣 ereport ����ֻ��һ���Ǻ��������Ĵ�����Ҫ��Ϊ�˱�������Ϣ���ɿ������� C ������ĺ������á� ereport ֱ�ӽ��ܵ�Ψһ���������ؼ��� ����Ϣ�ı����κθ�����ϢԪ�ض���ͨ���� ereport ��������ø������������� errmsg�����ɵġ�
���͵ĵ��� ereport �ķ�ʽ����������������������
ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero")));
���������������ؼ��� ERROR ��һ������ ���� errcode ��ʹ��һ�������� src/include/utils/errcodes.h ����ĺ����� SQLSTATE ������롣 errmsg �����ṩ��Ҫ����Ϣ�ı��� ��ע������Բ������Χ�ڸ�������������Χ — ��ô����Ȼ���ˣ���������DZ���ġ�
Ȼ����һ�������ӵ����ӣ�
ereport(ERROR, (errcode(ERRCODE_AMBIGUOUS_FUNCTION), errmsg("function %s is not unique", func_signature_string(funcname, nargs, actual_arg_types)), errhint("Unable to choose a best candidate function. " "You may need to add explicit typecasts.")));
���������ʾ��ʹ�ø�ʽ�����������ʱ��ֵǶ��һ����Ϣ�ı����÷��� ͬ�������ṩ��һ����ѡ��"��ʾ"��Ϣ��
ereport ���õĸ��������У�
errcode(sqlerrcode) Ϊ���������� SQLSTATE �����ʶ�����롣 ���û�е���������̣����Ҵ������ؼ����� ERROR ����ߣ���ô�����ʶ��ȱʡ�� ERRCODE_INTERNAL_ERROR�� ����������ؼ����� WARNING����Ϊ ERRCODE_WARNING�� �������� NOTICE ���߸��ͼ���Ϊ ERRCODE_SUCCESSFUL_COMPLETION�� ��Ȼ��Щȱʡ���ܷ��㣬������û�����ʡ�� errcode() ����֮ǰ��˼��
errmsg(const char *msg, ...) ������������Ϣ�ı����Լ����ܵIJ������е�����ʱ��ֵ�� ������ʹ�� sprintf ���ĸ�ʽ�������ġ� ���� sprintf ���ܵı���ʽ���룬������ %m ���ڲ��� strerror Ϊ��ǰ errno ֵ���صĴ�����Ϣ�� [1] %m ����Ҫ���� errmsg �IJ����б������κζ�Ӧ����Ŀ�� ��ע�������Ϣ�ִ��ڸ�ʽ����õ�����֮ǰ������ͨ�� gettext ���л�ȡ���ʵı��ػ���
errmsg_internal(const char *msg, ...) �� errmsg һ���� ֻ����Ϣ�ִ�����������ڹ��ʻ���Ϣ�ֵ�� �������Ӧ������"�����ܷ���"�������Ҳ���Dz�ֵ��չ�����з���ij��ϡ�
errdetail(const char *msg, ...) �ṩһ����ѡ��"��ϸ"��Ϣ�� �ڴ��ڶ���ĵ���Ϣ�����Һ��ʺϷ�������Ϣ�����ʱ��ʹ����������� ��Ϣ�ִ�����ķ����� errmsg ��ȫһ����
errhint(const char *msg, ...) �ṩһ����ѡ��"��ʾ"��Ϣ�� ������������ṩ���������Ľ��飬�������ṩ�������ʵ�� ��Ϣ�ִ�����ķ�ʽ�� errmsg һ����
errcontext(const char *msg, ...) ͨ������ֱ�Ӵ� ereport ��Ϣ����ֱ�ӵ��ã� �������� error_context_stack �ص��������ṩ�йش������Ļ�������Ϣ�� ���磬��ǰ��λ������һ�� PL ������ȵȡ� ��Ϣ�ִ��Ĵ���� errmsg ��ȫһ���� ����������������ͬ�����������һ�� ereport ��������Ե��ö�Σ� ���ĵ������ɵ��ִ������Ÿ��ԵĻ��з�������ԭ�����ִ��ϡ�
errposition(int cursorpos) ����һ�������ڲ�ѯ�ִ�����ı�λ�á� Ŀǰ��ֻ���ڻ㱨��ѯ��������еĴʷ���������μ��Ĵ������á�
errcode_for_file_access() ��һ������������������Ϊһ���ļ��������ϵͳ����ѡ��һ�����ʵ� SQLSTATE �����ʶ���� �����ñ��������� errno �ж������ĸ�������롣 ͨ����Ӧ�ú�����Ϣ�ı���� %m ���ʹ�á�
errcode_for_socket_access() ��һ������������������Ϊһ��������ص�ϵͳ����ѡ��һ�����ʵ� SQLSTATE �����ʶ����
����һ����һЩ�� elog ��������Ȼ��Ƶ��ʹ�á� һ�� elog ����
elog(level, "format string", ...);
��ȫ��Ч��
ereport(level, (errmsg_internal("format string", ...)));
��ע�� SQLSTATE �����������ȱʡ�ģ�������Ϣ�ִ���û�а����ڹ��ʻ���Ϣ�ֵ�� ��ˣ�elog Ӧ��ֻ�����ڲ������Լ��Ͳ�ĵ�����־�� �κ���ͨ�û�����Ȥ����Ϣ��Ӧ��ͨ�� ereport ���ɡ� ��Ȼ�����д����ڲ���"�����ܷ���"�Ĵ�����ʹ�� elog�� ��Ϊ��Щ��Ϣ��û��DZ�ʾ�ü�Щ�á�
��д�õĴ�����Ϣ�Ľ�������� Section 43.3 �ҵ���
[1] | Ҳ����˵���ڵ��� ereport ���õ�ʱ��ǰ����ֵ�� �ڸ������������� errno ���Ľ�����Ӱ������ ����������� errmsg �IJ����б�����ȷ��д strerror(errno)�� ��һ��Ͳ��ܱ�֤�ˣ���ˣ��벻Ҫ��ô���� |