PostgreSQL 数据库错误代码解释

PostgreSQL 服务器发出的所有消息都赋予了五个字符 的错误代码, 这些代码遵循 SQL 的 "SQLSTATE" 代码的习惯。需要知道发生了什么错误条件的应用通常应该测试错误代码, 而不是查看文本错误信息。这些错误 代码轻易不会随着 PostgreSQL 的版本更新而修改, 并且一般也不会随着错误信息的本地化而发生修改。 请注意有些,但不是全部,PostgreSQL 生成的错误代码是由 SQL 标准定义的; 有些标准没有定义的错误条件是我们发明的或者是从其它数据库借来的。

根据标准,错误代码的头两个字符表示错误类别,而后三个字符表示在该 类别内特定的条件。 因此,那些不能识别特定错误代码的应用仍然可以从错误类别中推断要做什么。

Table A-1 里面列出了 PostgreSQL 8.1 定义的所有错误代码。(有些实际上目前并没有使用,但是 SQL 标准定义了。) 错误类别也列出在此。对于每个错误类别都有个"标准"的错误代码, 它的最后三个字符是 000。这个代码只用于那些落在该类别内, 但是没有赋予任何更准确的代码的错误条件。

PL/pgSQL 用于每个错误代码的条件名和表中显示的措辞相同, 只是用下划线代替了空白。比如,代码 22012,DIVISION BY ZERO, 它的条件名是 DIVISION_BY_ZERO。条件名可以用大写或者小写来写都可以。 (请注意 PL/pgSQL 并不识别警告,这一点和错误,条件名正相反; 那些类别是 00,01,和 02。)

"""
数据库返回码
"""

{
    # 00 类 成功完成
    '00000': '成功完成(SUCCESSFUL COMPLETION)',
    # 01 类 警告
    '01000': '警告(WARNING)',
    '0100C': '返回了动态结果(DYNAMIC RESULT SETS RETURNED)',
    '01008': '警告,隐含补齐了零比特位(IMPLICIT ZERO BIT PADDING)',
    '01003': '在集合函数里消除了空值(NULL VALUE ELIMINATED IN SET FUNCTION)',
    '01007': '没有赋予权限(PRIVILEGE NOT GRANTED)',
    '01006': '没有撤销权限(PRIVILEGE NOT REVOKED)',
    '01004': '字串数据在右端截断(STRING DATA RIGHT TRUNCATION)',
    '01P01': '废弃的特性(DEPRECATED FEATURE)',
    # 02 类 没有数据 — 按照 SQL 标准的要求,这也是警告类
    '02000': '没有数据(NO DATA)',
    '02001': '返回了没有附加动态结果集(NO ADDITIONAL DYNAMIC RESULT SETS RETURNED)',
    # 03 类 SQL 语句尚未结束
    '03000': 'SQL 语句尚未结束(SQL STATEMENT NOT YET COMPLETE)',
    # 08 类 连接例外
    '08000': '连接例外(CONNECTION EXCEPTION)',
    '08003': '连接不存在(CONNECTION DOES NOT EXIST)',
    '08006': '连接失败(CONNECTION FAILURE)',
    '08001': 'SQL 客户端不能建立 SQL 连接(SQLCLIENT UNABLE TO ESTABLISH SQLCONNECTION)',
    '08004': 'SQL 服务器拒绝建立 SQL 连接(SQLSERVER REJECTED ESTABLISHMENT OF SQLCONNECTION)',
    '08007': '未知的事务解析(TRANSACTION RESOLUTION UNKNOWN)',
    '08P01': '违反协议(PROTOCOL VIOLATION)',
    # 09 类 触发器动作列外
    '09000': '触发的动作例外(TRIGGERED ACTION EXCEPTION)',
    # 0A 类 不支持特性
    '0A000': '不支持此特性(FEATURE NOT SUPPORTED)',
    # 0B 类 非法事务初始化
    '0B000': '非法事务初始化(INVALID TRANSACTION INITIATION)',
    # 0F 类 指示器例外
    '0F000': '指示器例外(LOCATOR EXCEPTION)',
    '0F001': '非法的定位器声明(INVALID LOCATOR SPECIFICATION)',
    # 0L 类 非法赋权人
    '0L000': '非法赋权人(INVALID GRANTOR)',
    '0LP01': '非法赋权操作(INVALID GRANT OPERATION)',
    # 0P 类 非法角色声明
    '0P000': '非法角色声明(INVALID ROLE SPECIFICATION)',
    # 21 类 势违反
    '21000': '势违反(CARDINALITY VIOLATION)',
    # 22 类 数据例外
    '22000': '数据例外(DATA EXCEPTION)',
    '2202E': '数组下标错误(ARRAY SUBSCRIPT ERROR)',
    '22021': '字符不在准备好的范围内(CHARACTER NOT IN REPERTOIRE)',
    '22008': '日期时间字段溢出(DATETIME FIELD OVERFLOW)',
    '22012': '被零除(DIVISION BY ZERO)',
    '22005': '赋值中出错(ERROR IN ASSIGNMENT)',
    '2200B': '逃逸字符冲突(ESCAPE CHARACTER CONFLICT)',
    '22022': '指示器溢出(INDICATOR OVERFLOW)',
    '22015': '内部字段溢出(INTERVAL FIELD OVERFLOW)',
    '2201E': '对数运算的非法参数(INVALID ARGUMENT FOR LOGARITHM)',
    '2201F': '指数函数的非法参数(INVALID ARGUMENT FOR POWER FUNCTION)',
    '2201G': '宽桶函数的非法参数(INVALID ARGUMENT FOR WIDTH BUCKET FUNCTION)',
    '22018': '类型转换时非法的字符值(INVALID CHARACTER VALUE FOR CAST)',
    '22007': '非法日期时间格式(INVALID DATETIME FORMAT)',
    '22019': '非法的逃逸字符(INVALID ESCAPE CHARACTER)',
    '2200D': '非法的逃逸字节(INVALID ESCAPE OCTET)',
    '22025': '非法逃逸序列(INVALID ESCAPE SEQUENCE)',
    '22P06': '非标准使用逃逸字符(NONSTANDARD USE OF ESCAPE CHARACTER)',
    '22010': '非法指示器参数值(INVALID INDICATOR PARAMETER VALUE)',
    '22020': '非法限制值(INVALID LIMIT VALUE)',
    '22023': '非法参数值(INVALID PARAMETER VALUE)',
    '2201B': '非法正则表达式(INVALID REGULAR EXPRESSION)',
    '22009': '非法时区显示值(INVALID TIME ZONE DISPLACEMENT VALUE)',
    '2200C': '非法使用逃逸字符(INVALID USE OF ESCAPE CHARACTER)',
    '2200G': '最相关类型不匹配(MOST SPECIFIC TYPE MISMATCH)',
    '22004': '不允许 NULL 值(NULL VALUE NOT ALLOWED)',
    '22002': 'NULL 值不能做指示器参数(NULL VALUE NO INDICATOR PARAMETER)',
    '22003': '数字值超出范围(NUMERIC VALUE OUT OF RANGE)',
    '22026': '字串数据长度不匹配(STRING DATA LENGTH MISMATCH)',
    '22001': '字串数据右边被截断(STRING DATA RIGHT TRUNCATION)',
    '22011': '抽取子字串错误(SUBSTRING ERROR)',
    '22027': '截断错误(TRIM ERROR)',
    '22024': '未结束的 C 字串(UNTERMINATED C STRING)',
    '2200F': '零长度的字符串(ZERO LENGTH CHARACTER STRING)',
    '22P01': '浮点例外(FLOATING POINT EXCEPTION)',
    '22P02': '非法文本表现形式(INVALID TEXT REPRESENTATION)',
    '22P03': '非法二进制表现形式(INVALID BINARY REPRESENTATION)',
    '22P04': '错误的 COPY 格式(BAD COPY FILE FORMAT)',
    '22P05': '不可翻译字符(UNTRANSLATABLE CHARACTER)',
    # 23 类 违反完整性约束
    '23000': '违反完整性约束(INTEGRITY CONSTRAINT VIOLATION)',
    '23001': '违反限制(RESTRICT VIOLATION)',
    '23502': '违反非空(NOT NULL VIOLATION)',
    '23503': '违反外键约束(FOREIGN KEY VIOLATION)',
    '23505': '违反唯一约束(UNIQUE VIOLATION)',
    '23514': '违反检查(CHECK VIOLATION)',
    # 24 类 非法游标状态
    '24000': '非法游标状态(INVALID CURSOR STATE)',
    # 25 类 非法事务状态
    '25000': '非法事务状态(INVALID TRANSACTION STATE)',
    '25001': '活跃的 SQL 状态(ACTIVE SQL TRANSACTION)',
    '25002': '分支事务已经激活(BRANCH TRANSACTION ALREADY ACTIVE)',
    '25008': '持有的游标要求同样的隔离级别(HELD CURSOR REQUIRES SAME ISOLATION LEVEL)',
    '25003': '对分支事务的不恰当的访问方式(INAPPROPRIATE ACCESS MODE FOR BRANCH TRANSACTION)',
    '25004': '对分支事务的不恰当的隔离级别(INAPPROPRIATE ISOLATION LEVEL FOR BRANCH TRANSACTION)',
    '25005': '分支事务没有活跃的 SQL 事务(NO ACTIVE SQL TRANSACTION FOR BRANCH TRANSACTION)',
    '25006': '只读的 SQL 事务(READ ONLY SQL TRANSACTION)',
    '25007': '不支持混和的模式和数据语句(SCHEMA AND DATA STATEMENT MIXING NOT SUPPORTED)',
    '25P01': '没有活跃的 SQL 事务(NO ACTIVE SQL TRANSACTION)',
    '25P02': '在失败的 SQL 事务中(IN FAILED SQL TRANSACTION)',
    # 26 类 非法 SQL 语句名
    '26000': '非法 SQL 语句名(INVALID SQL STATEMENT NAME)',
    # 27 类 触发的数据改变违规
    '27000': '触发的数据改变违规(TRIGGERED DATA CHANGE VIOLATION)',
    # 28 类 非法授权声明
    '28000': '非法授权声明(INVALID AUTHORIZATION SPECIFICATION)',
    # 2B 类 依然存在依赖的优先级描述符
    '2B000': '依然存在依赖的优先级描述符(DEPENDENT PRIVILEGE DESCRIPTORS STILL EXIST)',
    '2BP01': '依赖性对象仍然存在(DEPENDENT OBJECTS STILL EXIST)',
    # 2D 类 非法的事务终止
    '2D000': '非法的事务终止(INVALID TRANSACTION TERMINATION)',
    # 2F 类 SQL 过程例外
    '2F000': 'SQL 过程例外(SQL ROUTINE EXCEPTION)',
    '2F005': '执行的函数没有返回语句(FUNCTION EXECUTED NO RETURN STATEMENT)',
    '2F002': '不允许修改 SQL 数据(MODIFYING SQL DATA NOT PERMITTED)',
    '2F003': '企图使用禁止的 SQL 语句(PROHIBITED SQL STATEMENT ATTEMPTED)',
    '2F004': '不允许读取 SQL 数据(READING SQL DATA NOT PERMITTED)',
    # 34 类 非法游标名
    '34000': '非法游标名(INVALID CURSOR NAME)',
    # 38 类 外部过程例外
    '38000': '外部过程例外(EXTERNAL ROUTINE EXCEPTION)',
    '38001': '不允许包含的 SQL (CONTAINING SQL NOT PERMITTED)',
    '38002': '不允许修改 SQL 数据(MODIFYING SQL DATA NOT PERMITTED)',
    '38003': '企图使用禁止的 SQL 语句(PROHIBITED SQL STATEMENT ATTEMPTED)',
    '38004': '不允许读取 SQL 数据(READING SQL DATA NOT PERMITTED)',
    # 39 类 外部过程调用例外
    '39000': '外部过程调用例外(EXTERNAL ROUTINE INVOCATION EXCEPTION)',
    '39001': '返回了非法的 SQLSTATE(INVALID SQLSTATE RETURNED)',
    '39004': '不允许空值(NULL VALUE NOT ALLOWED)',
    '39P01': '违反触发器协议(TRIGGER PROTOCOL VIOLATED)',
    '39P02': '违反SRF协议(SRF PROTOCOL VIOLATED)',
    # 3B 类 保存点例外
    '3B000': '保存点例外(SAVEPOINT EXCEPTION)',
    '3B001': '无效的保存点声明(INVALID SAVEPOINT SPECIFICATION)',
    # 3D 类 非法数据库名
    '3D000': '非法数据库名(INVALID CATALOG NAME)',
    # 3F 类 非法模式名
    '3F000': '非法模式名(INVALID SCHEMA NAME)',
    # 40 类 事务回滚
    '40000': '事务回滚(TRANSACTION ROLLBACK)',
    '40002': '违反事务完整性约束(TRANSACTION INTEGRITY CONSTRAINT VIOLATION)',
    '40001': '串行化失败(SERIALIZATION FAILURE)',
    '40003': '不知道语句是否结束(STATEMENT COMPLETION UNKNOWN)',
    '40P01': '侦测到死锁(DEADLOCK DETECTED)',
    # 42 类 语法错误或者违反访问规则
    '42000': '语法错误或者违反访问规则(SYNTAX ERROR OR ACCESS RULE VIOLATION)',
    '42601': '语法错误(SYNTAX ERROR)',
    '42501': '权限不够(INSUFFICIENT PRIVILEGE)',
    '42846': '无法进行类型转换(CANNOT COERCE)',
    '42803': '分组错误(GROUPING ERROR)',
    '42830': '非法的外键(INVALID FOREIGN KEY)',
    '42602': '非法名字(INVALID NAME)',
    '42622': '名字太长(NAME TOO LONG)',
    '42939': '保留名字(RESERVED NAME)',
    '42804': '数据类型不匹配(DATATYPE MISMATCH)',
    '42P18': '未决的数据类型(INDETERMINATE DATATYPE)',
    '42809': '错误的对象类型(WRONG OBJECT TYPE)',
    '42703': '未定义的字段(UNDEFINED COLUMN)',
    '42883': '未定义的函数(UNDEFINED FUNCTION)',
    '42P01': '未定义的表(UNDEFINED TABLE)',
    '42P02': '未定义的参数(UNDEFINED PARAMETER)',
    '42704': '未定义对象(UNDEFINED OBJECT)',
    '42701': '重复的字段(DUPLICATE COLUMN)',
    '42P03': '重复的游标(DUPLICATE CURSOR)',
    '42P04': '重复的数据库(DUPLICATE DATABASE))',
    '42723': '重复的函数(DUPLICATE FUNCTION)',
    '42P05': '重复的准备好语句(DUPLICATE PREPARED STATEMENT)',
    '42P06': '重复的模式(DUPLICATE SCHEMA)',
    '42P07': '重复的表(DUPLICATE TABLE)',
    '42712': '重复的别名(DUPLICATE ALIAS)',
    '42710': '重复的对象(DUPLICATE OBJECT)',
    '42702': '模糊的字段(AMBIGUOUS COLUMN)',
    '42725': '模糊的函数(AMBIGUOUS FUNCTION)',
    '42P08': '模糊的参数(AMBIGUOUS PARAMETER)',
    '42P09': '模糊的别名(AMBIGUOUS ALIAS)',
    '42P10': '非法字段引用(INVALID COLUMN REFERENCE)',
    '42611': '非法字段定义(INVALID COLUMN DEFINITION)',
    '42P11': '非法游标定义(INVALID CURSOR DEFINITION)',
    '42P12': '非法的数据库定义(INVALID DATABASE DEFINITION)',
    '42P13': '非法函数定义(INVALID FUNCTION DEFINITION)',
    '42P14': '非法准备好语句定义(INVALID PREPARED STATEMENT DEFINITION)',
    '42P15': '非法模式定义(INVALID SCHEMA DEFINITION)',
    '42P16': '非法表定义(INVALID TABLE DEFINITION)',
    '42P17': '非法对象定义(INVALID OBJECT DEFINITION)',
    # 44 类 违反 WITH CHECK 选项
    '44000': '违反 WITH CHECK 选项(WITH CHECK OPTION VIOLATION)',
    # 53 类 资源不够
    '53000': '资源不够(INSUFFICIENT RESOURCES)',
    '53100': '磁盘满(DISK FULL)',
    '53200': '内存耗尽(OUT OF MEMORY)',
    '53300': '太多连接(TOO MANY CONNECTIONS)',
    # 54 类 超过程序限制
    '54000': '超过程序限制(PROGRAM LIMIT EXCEEDED)',
    '54001': '语句太复杂(STATEMENT TOO COMPLEX)',
    '54011': '太多字段(TOO MANY COLUMNS)',
    '54023': '参数太多(TOO MANY ARGUMENTS)',
    # 55 类 对象不在预先要求的状态
    '55000': '对象不在预先要求的状态(OBJECT NOT IN PREREQUISITE STATE)',
    '55006': '对象在使用中(OBJECT IN USE)',
    '55P02': '无法修改运行时参数(CANT CHANGE RUNTIME PARAM)',
    '55P03': '锁不可获得(LOCK NOT AVAILABLE)',
    # 57 类 操作者干涉
    '57000': '操作者干涉(OPERATOR INTERVENTION)',
    '57014': '查询被取消(QUERY CANCELED)',
    '57P01': '管理员关机(ADMIN SHUTDOWN)',
    '57P02': '崩溃关机(CRASH SHUTDOWN)',
    '57P03': '现在无法连接(CANNOT CONNECT NOW)',
    # 58 类 系统错误( PostgreSQL 自己内部的错误)
    '58030': 'IO 错误(IO ERROR)',
    '58P01': '未定义的文件(UNDEFINED FILE)',
    '58P02': '重复的文件(DUPLICATE FILE)',
    # F0 类 配置文件错误
    'F0000': '配置文件错误(CONFIG FILE ERROR)',
    'F0001': '锁文件存在(LOCK FILE EXISTS)',
    # P0 类 PL/pgSQL 错误
    'P0000': 'PLPGSQL 错误(PLPGSQL ERROR)',
    'P0001': '抛出例外(RAISE EXCEPTION)',
    # XX 类 内部错误
    'XX000': '内部错误(INTERNAL ERROR)',
    'XX001': '数据损坏(DATA CORRUPTED)',
    'XX002': '索引损坏(INDEX CORRUPTED)'
}

 

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目录 前言 何为 PostgreSQL? PostgreSQL 简史 格式约定 更多信息 臭虫汇报指导 I. 教程 1. 从头开始 2. SQL 语言 3. 高级特性 II. SQL 语言 4. SQL 语法 5. 数据定义 6. 数据操作 7. 查询 8. 数据类型 9. 函数和操作符 10. 类型转换 11. 索引 12. 并发控制 13. 性能提升技巧 III. 服务器管理 14. 安装指导 15. 在 Windows 上安装客户端 16. 操作系统环境 17. 服务器配置 18. 数据库角色和权限 19. 管理数据库 20. 用户认证 21. 区域 22. 日常数据库维护工作 23. 备份与恢复 24. 高可用性与负载均衡 25. 监控数据库的活动 26. 监控磁盘使用情况 27. 可靠性和预写式日志 28. 回归测试 IV. 客户端接口 29. libpq - C库 30. 大对象 31. ECPG - 在C里嵌入SQL 32. 信息模式 V. 服务器端编程 33. 扩展 SQL 34. 触发器 35. 规则系统 36. 过程语言 37. PL/pgSQL - SQL 过程语言 38. PL/Tcl - Tcl 过程语言 39. PL/Perl - Perl 过程语言 40. PL/Python - Python 过程语言 41. 服务器编程接口 VI. 参考手册 I. SQL 命令 II. PostgreSQL 客户端应用程序 III. PostgreSQL 服务器应用程序 VII. 内部 42. PostgreSQL 内部概貌 43. 系统表 44. 前/后端协议 45. PostgreSQL 编码约定 46. 本地语言支持 47. 书写一个过程语言处理器 48. 基因查询优化器 49. 索引访问方法接口定义 50. GiST 索引 51. GIN 索引 52. 数据库物理存储 53. BKI 后端接口 54. 规划器如何使用统计信息 VIII. 附录 A. PostgreSQL 错误代码 B. 日期/时间支持 C. SQL 关键字 D. SQL 兼容性 F. CVS 仓库 G. 文档 H. 外部项目
使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparser是Postgresql中进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows的安装介绍。原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其中,编译环境只是工具,只要搞清楚个中原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装:编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码中的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码中去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值