监控Greenplum系统

可以用系统中包含的各种工具以及附加组件来监控一个Greenplum数据库系统。

观察Greenplum数据库系统日常的性能有助于管理员理解系统的行为、计划工作流以及故障排查问题。 本章讨论用于监控数据库性能和活动的工具。

另外,记得回顾Recommended Monitoring and Maintenance Tasks中编写脚本 监控活动来快速检测系统中问题的有关内容。

Parent topic: 管理一个Greenplum系统

监控数据库活动和性能

Greenplum数据库包含一个可选的系统监控和管理数据库gpperfmon,管理员可以 选择启用它。gpperfmon_install命令行工具创建gpperfmon 数据库并启用数据收集代理来存储查询和系统矩阵信息到该数据库。管理员可以查询gpperfmon 数据库中的矩阵信息。更多gpperfmon的信息,请见Greenplum Database Reference Guide。

监控系统状态

作为一个Greenplum数据库管理员,必须监控系统的问题事件,例如一个Segment宕机或者一台Segment主机磁盘 空间耗尽。下面的主题描述如何监控一个Greenplum数据库系统的健康状况以及检查一个Greenplum数据库系统的 特定状态信息。

检查系统状态

一个Greenplum数据库系统由横跨多台机器的多个PostgreSQL实例(Master和Segment)构成。要监控一个 Greenplum数据库系统,需要了解整个系统的信息以及个体实例的状态信息。gpstate 工具提供有关一个Greenplum数据库系统的状态信息。

查看Master和Segment的状态及配置

默认的gpstate行为是检查Segment实例并且显示可用和失效Segment的一个简短状态。 例如,要快速查看Greenplum数据库系统的状态:

  1. $ gpstate

要查看Greenplum数据库阵列配置更详细的信息,使用带有-s选项的gpstate:

  1. $ gpstate -s

查看镜像配置和状态

如果在使用镜像作为数据冗余,用户可能想要看看系统中的镜像Segment实例列表、它们当前的同步状态以及 镜像和主Segment之间的映射。例如,要查看一个系统中的镜像Segment和它们的状态:5

  1. $ gpstate -m

要查看主Segment到镜像Segment的映射:

  1. $ gpstate -c

要查看后备Master镜像的状态:

  1. $ gpstate -f

检查磁盘空间使用

一个数据库管理员最重要的监控任务是确保Master和Segment数据目录所在的文件系统的使用率不会超过 70%的。完全占满的数据磁盘不会导致数据损坏,但是可能会妨碍数据库的正常操作。如果磁盘占用得太满, 可能会导致数据库服务器关闭。

可以使用gp_toolkit管理模式中的gp_disk_free外部表 来检查Segment主机文件系统中的剩余空闲空间(以KB为计量单位)。例如:

  1. =# SELECT * FROM gp_toolkit.gp_disk_free
  2. ORDER BY dfsegment;

检查分布式数据库和表的大小

gp_toolkit管理模式包含几个可以用来判断Greenplum数据库的分布式数据库、 模式、表或索引磁盘空间使用的视图。

用于检查数据库对象尺寸和磁盘空间的视图列表,请见Greenplum Database Reference Guide.

查看一个数据库的磁盘空间使用情况

要查看一个数据库的总大小(以字节计),使用gp_toolkit管理模式中的gp_size_of_database 视图。例如:

  1. => SELECT * FROM gp_toolkit.gp_size_of_database
  2. ORDER BY sodddatname;

查看一个表的磁盘空间使用情况

gp_toolkit管理模式包含几个检查表大小的视图。表大小视图根据对象ID (而不是名称)列出表。要根据一个表的名称检查其尺寸,必须在pg_class表中查找关系名称 (relname)。例如:

  1. => SELECT relname AS name, sotdsize AS size, sotdtoastsize
  2. AS toast, sotdadditionalsize AS other
  3. FROM gp_toolkit.gp_size_of_table_disk as sotd, pg_class
  4. WHERE sotd.sotdoid=pg_class.oid ORDER BY relname;

可用的表大小视图的列表请见Greenplum Database Reference Guide.

查看索引的磁盘空间使用情况

gp_toolkit管理模式包含几个用于检查索引大小的视图。要查看一个表上所有索引的总大小,使用 gp_size_of_all_table_indexes视图。要查看一个特定索引的大小,使用gp_size_of_index视图。 该索引大小视图根据对象ID(而不是名称)列出表和索引。要根据一个索引的名称查看其尺寸,必须在pg_class 表中查找关系名称(relname)。例如:

  1. => SELECT soisize, relname as indexname
  2. FROM pg_class, gp_toolkit.gp_size_of_index
  3. WHERE pg_class.oid=gp_size_of_index.soioid
  4. AND pg_class.relkind='i';

检查数据分布倾斜

Greenplum数据库中所有的表都是分布式的,意味着它们的数据被按规则划分到系统中的所有Segment上。 不均匀分布的数据可能会削弱查询处理性能。一个表的分布策略在表创建时被确定。有关选择表分布策略的信息, 请见下列主题:

gp_toolkit管理模式还包含一些用于检查表上数据分布倾斜的视图。有关如何检查非均匀数据分布的信息, 请见Greenplum Database Reference Guide.

查看一个表的分布键

要查看一个表中被用作数据分布键的列,可以使用psql中的\d+ 元命令来检查表的定义。例如:

  1. =# \d+ sales
  2. Table "retail.sales"
  3. Column | Type | Modifiers | Description
  4. -------------+--------------+-----------+-------------
  5. sale_id | integer | |
  6. amt | float | |
  7. date | date | |
  8. Has OIDs: no
  9. Distributed by: (sale_id)

当我们创建复制表时,Greenplum数据库会在每个Segment上都存储一份完整的表数据。复制表没有分布键。 \d+元命令会展示分布表的分布键,复制表展示状态为Distributed Replicated。

查看数据分布

要查看一个表中行的数据分布(每个Segment上的行数),可以运行一个这样的查询:

  1. =# SELECT gp_segment_id, count(*)
  2. FROM table_name GROUP BY gp_segment_id;

如果所有的Segment都有大致相同的行数,一个表就可以被认为是分布均匀的。

Note:

如果在复制表上运行该查询会执行失败,因为Greenplum数据库不允许用户查询复制表的gp_segment_id 系统列数据。由于每个Segment上都有一份完整的表数据,复制表必然是均匀的。

检查查询过程倾斜

当一个查询被执行时,所有的Segment应该具有等量的负载来保证最好的性能。如果发现了一个执行性能低下的查询, 可能需要使用EXPLAIN命令进行深入研究。有关使用EXPLAIN命令和查询 分析的信息,请见查询分析.

如果表的数据分布策略与查询谓词没有很好地匹配,查询执行负载可能会倾斜。要检查执行倾斜,可以运行一个这样 的查询:

  1. =# SELECT gp_segment_id, count(*) FROM table_name
  2. WHERE column='value' GROUP BY gp_segment_id;

这将显示对于给定的WHERE谓词,Segment会返回的行数。

查看数据分布所说的, 该查询在复制表上运行时也会报错,因为在复制表上查询的 gp_segment_id列不具有参考价值。

避免极度倾斜警告

当执行一个使用哈希连接操作的查询时,可能会收到下面的警告消息:

Extreme skew in the innerside of Hashjoin

当一个哈希连接操作符的输入倾斜时,就会发生这种情况。它不会阻碍查询成功完成。可以按照这些步骤来避免计划 中的倾斜:

  1. 确保所有的事实表都被分析过。
  2. 验证该查询用到的任何已填充临时表都被分析过。
  3. 查看该查询的EXPLAIN ANALYZE计划,并且在其中查找以下信息:
    • 如果有带多列过滤的扫描产生超过预估的行数,则将gp_selectivity_damping_factor 服务器配置参数的值设置为当前值的2倍以上并且重新测试该查询。
    • 如果在连接一个相对较小(小于5000行)的单一事实表时发生倾斜,将gp_segments_for_planner 服务器配置参数设置为1并且重新测试该查询。
  4. 检查应用于该查询的过滤属性是否匹配基表的分布键。如果过滤属性和分布键相同,考虑用不同的 分布键重新分布一些基表。
  5. 检查连接键的基数。如果基数较低,尝试用不同的连接列或者表上额外的过滤属性来重写该查询以降低行数。 这些更改可能会改变查询的语义。

查看数据库对象的元数据信息

Greenplum数据库在其系统目录中跟踪各种有关存储在数据库中对象(例如表、视图、索引等等)和 全局对象(例如角色和表空间)的元数据信息。

查看最后一个执行的操作

可以使用系统视图pg_stat_operationspg_stat_partition_operations 查看在一个对象(例如一个表)上执行的动作。例如,要查看在一个表上执行的动作,比如它何时被创建以及它上一次是什么时候被清理和分析:

  1. => SELECT schemaname as schema, objname as table,
  2. usename as role, actionname as action,
  3. subtype as type, statime as time
  4. FROM pg_stat_operations
  5. WHERE objname='cust';
  6. schema | table | role | action | type | time
  7. --------+-------+------+---------+-------+--------------------------
  8. sales | cust | main | CREATE | TABLE | 2016-02-09 18:10:07.867977-08
  9. sales | cust | main | VACUUM | | 2016-02-10 13:32:39.068219-08
  10. sales | cust | main | ANALYZE | | 2016-02-25 16:07:01.157168-08
  11. (3 rows)

查看一个对象的定义

要查看一个对象(例如表或者视图)的定义,在psql中可以使用\d+元命令。 例如,要查看一个表的定义:

  1. => \d+ mytable

查看会话内存使用信息

可以创建并且使用session_level_memory_consumption视图来查看正在Greenplum数据库上运行查询的会话的 当前内存利用信息。该视图包含会话信息以及该会话连接到的数据库、该会话当前运行的查询和会话处理所消耗的内存等信息。

创建session_level_memory_consumption视图

要在Greenplum数据库中创建session_level_memory_consumption视图, 为每一个数据库运行一次扩展创建语句CREATE EXTENSION gp_internal_tools;。 例如,要在数据库testdb中安装该视图,可使用这个命令:

  1. $ psql -d testdb -c "CREATE EXTENSION gp_internal_tools;"

session_level_memory_consumption视图

session_level_memory_consumption视图提供有关正在运行SQL查询的会话的内存消耗以及闲置时间的信息。

当基于资源队列的资源管理方式启用时,在该视图中,列is_runaway表示是否Greenplum数据库认为 该会话是一个失控会话,这种判断基于该会话的查询的vmem内存消耗来做出。在资源队列管理模式下,当查询消耗过多内存时, Greenplum数据库认为该会话处于失控状态。Greenplum数据库的服务器配置参数runaway_detector_activation_percent 控制Greenplum数据库什么时候会认为一个会话是失控会话。

在该视图中,当基于组的资源管理方式启用时,列is_runaway, runaway_vmem_mb,和 runaway_command_cnt功能失效。

Table 1. session_level_memory_consumption
类型引用描述
datnamename 该会话连接到的数据库名。
sess_idinteger 会话ID。
usenamename 会话用户的用户名。
current_querytext 该会话正在运行的当前SQL查询。
segidinteger Segment ID。
vmem_mbinteger 该会话的总vmem内存使用,以MB计。
is_runawayboolean 会话被标记为在Segment上失控。
qe_countinteger 该会话的查询处理数量。
active_qe_countinteger 该会话的活动查询处理数量。
dirty_qe_countinteger 还没有释放其内存的查询处理的数量。

对于没有运行的会话该值为-1

runaway_vmem_mbinteger 当会话被标记为失控会话时消耗的vmem内存量。
runaway_command_cntinteger 当会话被标记为失控会话时的命令计数。
idle_starttimestamptz 这个会话中上一次一个查询处理变成空闲的时间。

查看查询工作文件使用信息

Greenplum数据库管理方案gp_toolkit包含显示Greenplum数据库工作文件信息的视图。 如果没有足够的内存让查询完全在内存中执行,Greenplum数据库会在磁盘上创建工作文件。这些 信息可以用来故障排查和查询调优。这些视图中的信息也可以被用来为Greenplum数据库配置参数 gp_workfile_limit_per_query和gp_workfile_limit_per_segment 指定值。

在模式gp_toolkit中有下面这些视图:

  • gp_workfile_entries视图为当前在Segment上创建了工作文件的每个 操作符都包含一行。
  • gp_workfile_usage_per_query视图为当前在Segment上创建了工作 文件的每个查询都包含一行。
  • gp_workfile_usage_per_segment视图为每个Segment都包含一行。 每一行显示了当前在该Segment上用于工作文件的总磁盘空间。

有关使用gp_toolkit的信息请见使用gp_toolkit

查看数据库服务器日志文件

Greenplum数据库中的每一个数据库实例(Master和Segment)都运行着一个有着自己的服务器日志文件的 PostgreSQL数据库服务器。日常的日志文件被创建在Master和每个Segment的数据目录中的 pg_log目录下。

日志文件格式

服务器日志文件被写成一种逗号分隔值(CSV)格式。一些日志项并不会所有的域都有值。例如,只有与一个查询 工作者进程相关的日志项才会有slice_id值。可以用查询的会话标识符(gp_session_id) 和命令标识符(gp_command_count)来确定一个特定查询的相关日志项。

下列域会被写入到日志中:

Table 2. Greenplum数据库服务器日志格式
#域名称数据类型描述
1event_timetimestamp with time zone该日志项被写入到日志中的时间
2user_namevarchar(100)数据库用户名
3database_namevarchar(100)数据库名
4process_idvarchar(10)系统进程ID(以”p”为前缀)
5thread_idvarchar(50)线程号(以”th”为前缀)
6remote_hostvarchar(100)在Master上,是客户端机器的主机名/地址。在Segment上,是Master的主机名/地址。
7remote_portvarchar(10)Segment或者Master的端口号
8session_start_timetimestamp with time zone会话连接被打开的时间
9transaction_idintMaster上的顶层事务ID。这个ID是任何子事务的父亲。
10gp_session_idtext会话标识符号(以”con”为前缀)
11gp_command_counttext会话中的命令号(以”cmd”为前缀)
12gp_segmenttextSegment内容标识符(主Segment以”seg”为前缀,镜像Segment以”mir”为前缀)。Master的内容ID总是为-1。
13slice_idtext切片ID(被执行的查询计划的一部分)
14distr_tranx_idtext分布式事务ID
15local_tranx_idtext本地事务ID
16sub_tranx_idtext子事务ID
17event_severityvarchar(10)值包括:LOG、ERROR、FATAL、PANIC、DEBUG1、DEBUG2
18sql_state_codevarchar(10)与日志消息相关的SQL状态代码
19event_messagetext日志或者错误消息文本
20event_detailtext与一个错误或者警告消息相关的详细消息文本
21event_hinttext与一个错误或者警告消息相关的提示消息文本
22internal_querytext内部生成的查询文本
23internal_query_posint内部生成的查询文本的指针式索引
24event_contexttext这个消息产生的上下文
25debug_query_stringtext完整的用户提供的查询字符串,用于调试。内部使用可能会修改这个字符串。
26error_cursor_posint该查询字符串中的指针式索引
27func_nametext这个消息产生的函数
28file_nametext产生该消息的内部代码文件
29file_lineint产生该消息的内部代码文件的行号
30stack_tracetext与这个消息相关的堆栈跟踪

搜索Greenplum服务器日志文件

Greenplum数据库提供一个名为gplogfilter的工具,它可以在一个Greenplum数据库 日志文件中搜索匹配指定条件的项。默认情况下,这个工具在默认日志位置搜索Greenplum数据库的Master日志。 例如,要显示Master日志文件的最后三行:

  1. $ gplogfilter -n 3

要同时搜索所有Segment的日志文件,可以通过gpssh工具来运行gplogfilter。 例如,要显示每个Segment日志文件的最后三行:

  1. $ gpssh -f seg_host_file
  1. => source /usr/local/greenplum-db/greenplum_path.sh
  2. => gplogfilter -n 3 /gpdata/gp*/pg_log/gpdb*.log

使用gp_toolkit

使用Greenplum数据库的管理方案gp_toolkit来查询系统目录、日志文件和操作系统环境以得到系统状态信息。 gp_toolkit方案包含一些可以用SQL命令访问的视图。gp_toolkit方案对所有数据库用户都可以访问。一些对象 要求超级用户权限。用与下面类似的命令把gp_toolkit方案增加到用户的方案搜索路径中:

  1. => ALTER ROLE myrole SET search_path TO myschema,gp_toolkit;

有关可用的管理方案视图及其用法的描述,请见 Greenplum Database Reference Guide.

SQL标准错误代码

下面的表格列出了所有定义好的错误代码。有些没有被用到,但是在SQL标准中有定义。其中也显示了错误分类。 对于每一种错误分类都有一个标准错误代码,它的最后三个字符为000。这种代码只用于落入该分类却没有更详细 代码的错误情况。

每种错误代码的PL/pgSQL情况名称与该表中显示的短语相同,但是把空格替换成下划线。例如,代码22012 (DIVISION BY ZERO)的情况名称是DIVISION_BY_ZERO。情况名称不区分大小写。

Note: 与error截然不同,PL/pgSQL不识别warning、condition names,warning、error和 condition names的分类分别为00、01和02。

Table 3. SQL代码
错误代码含义常量
Class 00 — Successful Completion
00000SUCCESSFUL COMPLETIONsuccessful_completion
Class 01 — Warning
01000WARNINGwarning
0100CDYNAMIC RESULT SETS RETURNEDdynamic_result_sets_returned
01008IMPLICIT ZERO BIT PADDINGimplicit_zero_bit_padding
01003NULL VALUE ELIMINATED IN SET FUNCTIONnull_value_eliminated_in_set_function
01007PRIVILEGE NOT GRANTEDprivilege_not_granted
01006PRIVILEGE NOT REVOKEDprivilege_not_revoked
01004STRING DATA RIGHT TRUNCATIONstring_data_right_truncation
01P01DEPRECATED FEATUREdeprecated_feature
Class 02 — No Data (this is also a warning class per the SQL standard)
02000NO DATAno_data
02001NO ADDITIONAL DYNAMIC RESULT SETS RETURNEDno_additional_dynamic_result_sets_returned
Class 03 — SQL Statement Not Yet Complete
03000SQL STATEMENT NOT YET COMPLETEsql_statement_not_yet_complete
Class 08 — Connection Exception
08000CONNECTION EXCEPTIONconnection_exception
08003CONNECTION DOES NOT EXISTconnection_does_not_exist
08006CONNECTION FAILUREconnection_failure
08001SQLCLIENT UNABLE TO ESTABLISH SQLCONNECTIONsqlclient_unable_to_establish_sqlconnection
08004SQLSERVER REJECTED ESTABLISHMENT OF SQLCONNECTIONsqlserver_rejected_establishment_of_sqlconnection
08007TRANSACTION RESOLUTION UNKNOWNtransaction_resolution_unknown
08P01PROTOCOL VIOLATIONprotocol_violation
Class 09 — Triggered Action Exception
09000TRIGGERED ACTION EXCEPTIONtriggered_action_exception
Class 0A — Feature Not Supported
0A000FEATURE NOT SUPPORTEDfeature_not_supported
Class 0B — Invalid Transaction Initiation
0B000INVALID TRANSACTION INITIATIONinvalid_transaction_initiation
Class 0F — Locator Exception
0F000LOCATOR EXCEPTIONlocator_exception
0F001INVALID LOCATOR SPECIFICATIONinvalid_locator_specification
Class 0L — Invalid Grantor
0L000INVALID GRANTORinvalid_grantor
0LP01INVALID GRANT OPERATIONinvalid_grant_operation
Class 0P — Invalid Role Specification
0P000INVALID ROLE SPECIFICATIONinvalid_role_specification
Class 21 — Cardinality Violation
21000CARDINALITY VIOLATIONcardinality_violation
Class 22 — Data Exception
22000DATA EXCEPTIONdata_exception
2202EARRAY SUBSCRIPT ERRORarray_subscript_error
22021CHARACTER NOT IN REPERTOIREcharacter_not_in_repertoire
22008DATETIME FIELD OVERFLOWdatetime_field_overflow
22012DIVISION BY ZEROdivision_by_zero
22005ERROR IN ASSIGNMENTerror_in_assignment
2200BESCAPE CHARACTER CONFLICTescape_character_conflict
22022INDICATOR OVERFLOWindicator_overflow
22015INTERVAL FIELD OVERFLOWinterval_field_overflow
2201EINVALID ARGUMENT FOR LOGARITHMinvalid_argument_for_logarithm
2201FINVALID ARGUMENT FOR POWER FUNCTIONinvalid_argument_for_power_function
2201GINVALID ARGUMENT FOR WIDTH BUCKET FUNCTIONinvalid_argument_for_width_bucket_function
22018INVALID CHARACTER VALUE FOR CASTinvalid_character_value_for_cast
22007INVALID DATETIME FORMATinvalid_datetime_format
22019INVALID ESCAPE CHARACTERinvalid_escape_character
2200DINVALID ESCAPE OCTETinvalid_escape_octet
22025INVALID ESCAPE SEQUENCEinvalid_escape_sequence
22P06NONSTANDARD USE OF ESCAPE CHARACTERnonstandard_use_of_escape_character
22010INVALID INDICATOR PARAMETER VALUEinvalid_indicator_parameter_value
22020INVALID LIMIT VALUEinvalid_limit_value
22023INVALID PARAMETER VALUEinvalid_parameter_value
2201BINVALID REGULAR EXPRESSIONinvalid_regular_expression
22009INVALID TIME ZONE DISPLACEMENT VALUEinvalid_time_zone_displacement_value
2200CINVALID USE OF ESCAPE CHARACTERinvalid_use_of_escape_character
2200GMOST SPECIFIC TYPE MISMATCHmost_specific_type_mismatch
22004NULL VALUE NOT ALLOWEDnull_value_not_allowed
22002NULL VALUE NO INDICATOR PARAMETERnull_value_no_indicator_parameter
22003NUMERIC VALUE OUT OF RANGEnumeric_value_out_of_range
22026STRING DATA LENGTH MISMATCHstring_data_length_mismatch
22001STRING DATA RIGHT TRUNCATIONstring_data_right_truncation
22011SUBSTRING ERRORsubstring_error
22027TRIM ERRORtrim_error
22024UNTERMINATED C STRINGunterminated_c_string
2200FZERO LENGTH CHARACTER STRINGzero_length_character_string
22P01FLOATING POINT EXCEPTIONfloating_point_exception
22P02INVALID TEXT REPRESENTATIONinvalid_text_representation
22P03INVALID BINARY REPRESENTATIONinvalid_binary_representation
22P04BAD COPY FILE FORMATbad_copy_file_format
22P05UNTRANSLATABLE CHARACTERuntranslatable_character
Class 23 — Integrity Constraint Violation
23000INTEGRITY CONSTRAINT VIOLATIONintegrity_constraint_violation
23001RESTRICT VIOLATIONrestrict_violation
23502NOT NULL VIOLATIONnot_null_violation
23503FOREIGN KEY VIOLATIONforeign_key_violation
23505UNIQUE VIOLATIONunique_violation
23514CHECK VIOLATIONcheck_violation
Class 24 — Invalid Cursor State
24000INVALID CURSOR STATEinvalid_cursor_state
Class 25 — Invalid Transaction State
25000INVALID TRANSACTION STATEinvalid_transaction_state
25001ACTIVE SQL TRANSACTIONactive_sql_transaction
25002BRANCH TRANSACTION ALREADY ACTIVEbranch_transaction_already_active
25008HELD CURSOR REQUIRES SAME ISOLATION LEVELheld_cursor_requires_same_isolation_level
25003INAPPROPRIATE ACCESS MODE FOR BRANCH TRANSACTIONinappropriate_access_mode_for_branch_transaction
25004INAPPROPRIATE ISOLATION LEVEL FOR BRANCH TRANSACTIONinappropriate_isolation_level_for_branch_transaction
25005NO ACTIVE SQL TRANSACTION FOR BRANCH TRANSACTIONno_active_sql_transaction_for_branch_transaction
25006READ ONLY SQL TRANSACTIONread_only_sql_transaction
25007SCHEMA AND DATA STATEMENT MIXING NOT SUPPORTEDschema_and_data_statement_mixing_not_supported
25P01NO ACTIVE SQL TRANSACTIONno_active_sql_transaction
25P02IN FAILED SQL TRANSACTIONin_failed_sql_transaction
Class 26 — Invalid SQL Statement Name
26000INVALID SQL STATEMENT NAMEinvalid_sql_statement_name
Class 27 — Triggered Data Change Violation
27000TRIGGERED DATA CHANGE VIOLATIONtriggered_data_change_violation
Class 28 — Invalid Authorization Specification
28000INVALID AUTHORIZATION SPECIFICATIONinvalid_authorization_specification
Class 2B — Dependent Privilege Descriptors Still Exist
2B000DEPENDENT PRIVILEGE DESCRIPTORS STILL EXISTdependent_privilege_descriptors_still_exist
2BP01DEPENDENT OBJECTS STILL EXISTdependent_objects_still_exist
Class 2D — Invalid Transaction Termination
2D000INVALID TRANSACTION TERMINATIONinvalid_transaction_termination
Class 2F — SQL Routine Exception
2F000SQL ROUTINE EXCEPTIONsql_routine_exception
2F005FUNCTION EXECUTED NO RETURN STATEMENTfunction_executed_no_return_statement
2F002MODIFYING SQL DATA NOT PERMITTEDmodifying_sql_data_not_permitted
2F003PROHIBITED SQL STATEMENT ATTEMPTEDprohibited_sql_statement_attempted
2F004READING SQL DATA NOT PERMITTEDreading_sql_data_not_permitted
Class 34 — Invalid Cursor Name
34000INVALID CURSOR NAMEinvalid_cursor_name
Class 38 — External Routine Exception
38000EXTERNAL ROUTINE EXCEPTIONexternal_routine_exception
38001CONTAINING SQL NOT PERMITTEDcontaining_sql_not_permitted
38002MODIFYING SQL DATA NOT PERMITTEDmodifying_sql_data_not_permitted
38003PROHIBITED SQL STATEMENT ATTEMPTEDprohibited_sql_statement_attempted
38004READING SQL DATA NOT PERMITTEDreading_sql_data_not_permitted
Class 39 — External Routine Invocation Exception
39000EXTERNAL ROUTINE INVOCATION EXCEPTIONexternal_routine_invocation_exception
39001INVALID SQLSTATE RETURNEDinvalid_sqlstate_returned
39004NULL VALUE NOT ALLOWEDnull_value_not_allowed
39P01TRIGGER PROTOCOL VIOLATEDtrigger_protocol_violated
39P02SRF PROTOCOL VIOLATEDsrf_protocol_violated
Class 3B — Savepoint Exception
3B000SAVEPOINT EXCEPTIONsavepoint_exception
3B001INVALID SAVEPOINT SPECIFICATIONinvalid_savepoint_specification
Class 3D — Invalid Catalog Name
3D000INVALID CATALOG NAMEinvalid_catalog_name
Class 3F — Invalid Schema Name
3F000INVALID SCHEMA NAMEinvalid_schema_name
Class 40 — Transaction Rollback
40000TRANSACTION ROLLBACKtransaction_rollback
40002TRANSACTION INTEGRITY CONSTRAINT VIOLATIONtransaction_integrity_constraint_violation
40001SERIALIZATION FAILUREserialization_failure
40003STATEMENT COMPLETION UNKNOWNstatement_completion_unknown
40P01DEADLOCK DETECTEDdeadlock_detected
Class 42 — Syntax Error or Access Rule Violation
42000SYNTAX ERROR OR ACCESS RULE VIOLATIONsyntax_error_or_access_rule_violation
42601SYNTAX ERRORsyntax_error
42501INSUFFICIENT PRIVILEGEinsufficient_privilege
42846CANNOT COERCEcannot_coerce
42803GROUPING ERRORgrouping_error
42830INVALID FOREIGN KEYinvalid_foreign_key
42602INVALID NAMEinvalid_name
42622NAME TOO LONGname_too_long
42939RESERVED NAMEreserved_name
42804DATATYPE MISMATCHdatatype_mismatch
42P18INDETERMINATE DATATYPEindeterminate_datatype
42809WRONG OBJECT TYPEwrong_object_type
42703UNDEFINED COLUMNundefined_column
42883UNDEFINED FUNCTIONundefined_function
42P01UNDEFINED TABLEundefined_table
42P02UNDEFINED PARAMETERundefined_parameter
42704UNDEFINED OBJECTundefined_object
42701DUPLICATE COLUMNduplicate_column
42P03DUPLICATE CURSORduplicate_cursor
42P04DUPLICATE DATABASEduplicate_database
42723DUPLICATE FUNCTIONduplicate_function
42P05DUPLICATE PREPARED STATEMENTduplicate_prepared_statement
42P06DUPLICATE SCHEMAduplicate_schema
42P07DUPLICATE TABLEduplicate_table
42712DUPLICATE ALIASduplicate_alias
42710DUPLICATE OBJECTduplicate_object
42702AMBIGUOUS COLUMNambiguous_column
42725AMBIGUOUS FUNCTIONambiguous_function
42P08AMBIGUOUS PARAMETERambiguous_parameter
42P09AMBIGUOUS ALIASambiguous_alias
42P10INVALID COLUMN REFERENCEinvalid_column_reference
42611INVALID COLUMN DEFINITIONinvalid_column_definition
42P11INVALID CURSOR DEFINITIONinvalid_cursor_definition
42P12INVALID DATABASE DEFINITIONinvalid_database_definition
42P13INVALID FUNCTION DEFINITIONinvalid_function_definition
42P14INVALID PREPARED STATEMENT DEFINITIONinvalid_prepared_statement_definition
42P15INVALID SCHEMA DEFINITIONinvalid_schema_definition
42P16INVALID TABLE DEFINITIONinvalid_table_definition
42P17INVALID OBJECT DEFINITIONinvalid_object_definition
Class 44 — WITH CHECK OPTION Violation
44000WITH CHECK OPTION VIOLATIONwith_check_option_violation
Class 53 — Insufficient Resources
53000INSUFFICIENT RESOURCESinsufficient_resources
53100DISK FULLdisk_full
53200OUT OF MEMORYout_of_memory
53300TOO MANY CONNECTIONStoo_many_connections
Class 54 — Program Limit Exceeded
54000PROGRAM LIMIT EXCEEDEDprogram_limit_exceeded
54001STATEMENT TOO COMPLEXstatement_too_complex
54011TOO MANY COLUMNStoo_many_columns
54023TOO MANY ARGUMENTStoo_many_arguments
Class 55 — Object Not In Prerequisite State
55000OBJECT NOT IN PREREQUISITE STATEobject_not_in_prerequisite_state
55006OBJECT IN USEobject_in_use
55P02CANT CHANGE RUNTIME PARAMcant_change_runtime_param
55P03LOCK NOT AVAILABLElock_not_available
Class 57 — Operator Intervention
57000OPERATOR INTERVENTIONoperator_intervention
57014QUERY CANCELEDquery_canceled
57P01ADMIN SHUTDOWNadmin_shutdown
57P02CRASH SHUTDOWNcrash_shutdown
57P03CANNOT CONNECT NOWcannot_connect_now
Class 58 — System Error (errors external to Greenplum Database )
58030IO ERRORio_error
58P01UNDEFINED FILEundefined_file
58P02DUPLICATE FILEduplicate_file
Class F0 — Configuration File Error
F0000CONFIG FILE ERRORconfig_file_error
F0001LOCK FILE EXISTSlock_file_exists
Class P0 — PL/pgSQL Error
P0000PLPGSQL ERRORplpgsql_error
P0001RAISE EXCEPTIONraise_exception
P0002NO DATA FOUNDno_data_found
P0003TOO MANY ROWStoo_many_rows
Class XX — Internal Error
XX000INTERNAL ERRORinternal_error
XX001DATA CORRUPTEDdata_corrupted
XX002INDEX CORRUPTEDindex_corrupted