网站建设资讯

NEWS

网站建设资讯

postgresql无的简单介绍

求助,postgresql服务启动不了

到postgresql安装目录的bin文件夹下手动启动pg_ctl—— pg_ctl start -w -D "../data",未果,但是提示说某个文件没有权限创建。 解决办法是将整个postgreSQL安装目录附一个Everyone的权限。

创新互联是专业的会同网站建设公司,会同接单;提供成都网站制作、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行会同网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

启动,还是不成功,于是查看data/pg_log目录下的日志信息,发现无法创建inherite socket。 解决办法是运行 netsh winsock reset,然后重启系统。

如何解决postgresql 错误:08p01:无效的信息格式

Appendix A. PostgreSQL错误代码

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

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

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

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

Table A-1. PostgreSQL 错误代码

错误代码

含义

常量名

Class 00 — 成功完成

00000 成功完成 successful_completion

Class 01 — 警告

01000 警告 warning

0100C 返回了动态结果 dynamic_result_sets_returned

01008 警告,隐含补齐了零比特位 implicit_zero_bit_padding

01003 在集合函数里消除null null_value_eliminated_in_set_function

01007 没有赋予权限 privilege_not_granted

01006 没有撤销权限 privilege_not_revoked

01004 字符串数据在右端截断 string_data_right_truncation

01P01 废弃的特性 deprecated_feature

Class 02 — 没有数据(按照 SQL 标准的要求,这也是警告类)

02000 没有数据 no_data

02001 返回了没有附加动态结果集 no_additional_dynamic_result_sets_returned

Class 03 — SQL语句尚未结束

03000 SQL语句尚未结束 sql_statement_not_yet_complete

Class 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

Class 09 — Triggered Action Exception触发器动作异常

09000 触发器动作异常 triggered_action_exception

Class 0A — 不支持特性

0A000 不支持此特性 feature_not_supported

Class 0B — 非法事务初始化

0B000 非法事务初始化 invalid_transaction_initiation

Class 0F — 定位器异常

0F000 定位器异常 locator_exception

0F001 非法的定位器声明 invalid_locator_specification

Class 0L — 非法赋权者

0L000 非法赋权者 invalid_grantor

0LP01 非法赋权操作 invalid_grant_operation

Class 0P — 非法角色声明

0P000 非法角色声明 invalid_role_specification

Class 20 — 未发现情况

20000 未发现情况 case_not_found

Class 21 — 势违例

21000 势违例 cardinality_violation

Class 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指示器溢出 indicator_overflow

22015 内部字段溢出 interval_field_overflow

2201E 对数运算的非法参数 invalid_argument_for_logarithm

22014 NTILE函数的无效参数 invalid_argument_for_ntile_function

22016 N倍函数的无效参数 invalid_argument_for_nth_value_function

2201F 指数函数的无效参数 invalid_argument_for_power_function

2201G BUCKET函数的非法参数 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

22023 非法参数值 invalid_parameter_value

2201B 非法正则表达式 invalid_regular_expression

2201W 无效的行数限制 invalid_row_count_in_limit_clause

2201X 在结果抵消子句中无效的行数 invalid_row_count_in_result_offset_clause

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

2200L 不是一个XML文档 not_an_xml_document

2200M 无效的XML文档 invalid_xml_document

2200N 无效的XML内容 invalid_xml_content

2200S 无效的XML评论 invalid_xml_comment

2200T 无效的XML处理指令 invalid_xml_processing_instruction

Class 23 — 违反完整性约束

23000 违反完整性约束 integrity_constraint_violation

23001 约束限制 restrict_violation

23502 NOT NULL VIOLATION违反非空 not_null_violation

23503 违反外键约束 foreign_key_violation

23505 违反唯一约束 unique_violation

23514 违反检查 check_violation

23P01 违反排除 exclusion_violation

Class 24 — 非法游标状态

24000 非法游标状态 invalid_cursor_state

Class 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

Class 26 — 非法SQL语句名

26000 非法SQL语句名 invalid_sql_statement_name

Class 27 — 触发数据更改违规

27000 触发数据更改违规 triggered_data_change_violation

Class 28 — 非法授权声明

28000 非法授权声明 invalid_authorization_specification

28P01 非法密码 invalid_password

Class 2B — 依然存在依赖的优先级描述符

2B000 依然存在依赖的优先级描述符 dependent_privilege_descriptors_still_exist

2BP01 依赖性对象仍然存在 dependent_objects_still_exist

Class 2D — 非法的事务终止

2D000 非法的事务终止 invalid_transaction_termination

Class 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

Class 34 — 非法指针名

34000 非法指针名 invalid_cursor_name

Class 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

Class 39 — 外部过程调用异常

39000 外部过程调用异常 external_routine_invocation_exception

39001 返回了非法的SQL状态 invalid_sqlstate_returned

39004 不允许使用NULL null_value_not_allowed

39P01 违反触发器协议 trigger_protocol_violated

39P02 违反 SRF 协议 srf_protocol_violated

Class 3B — 保存点异常

3B000 保存点异常 savepoint_exception

3B001 无效的保存点声明 invalid_savepoint_specification

Class 3D — 非法目录名

3D000 非法目录名 invalid_catalog_name

Class 3F — 非法模式名

3F000 非法模式名 invalid_schema_name

Class 40 — 事务回滚

40000 事务回滚 transaction_rollback

40002 违反事务完整性约束 transaction_integrity_constraint_violation

40001 串行化失败 serialization_failure

40003 不知道语句是否结束 statement_completion_unknown

40P01 侦测到死锁 deadlock_detected

Class 42 — 语法错误或者违反访问规则

42000 语法错误或者违反访问规则 syntax_error_or_access_rule_violation

42601 语法错误 syntax_error

42501 权限不够 insufficient_privilege

42846 无法进行类型转换 cannot_coerce

42803 分组错误 grouping_error

42P20 开窗口错误 windowing_error

42P19 非法递归 invalid_recursion

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

Class 44 — 违反 WITH CHECK 选项

44000 违反 WITH CHECK 选项 with_check_option_violation

postgresql存储过程 怎么实现无返回值

PostgreSQL 存储过程定义格式如下:

■结构 PL/pgSQL是一种块结构的语言,比较方便的是用pgAdmin III新建Function,填入一些参数就可以了。

基本上是这样的:

CREATE OR REPLACE FUNCTION 函数名(参数1,[整型 int4, 整型数组 _int4, ...]) RETURNS 返回值类型 AS $BODY$ DECLARE 变量声明 BEGIN 函数体 END; $BODY$ LANGUAGE ‘plpgsql’ VOLATILE;

■变量类型 除了postgresql内置的变量类型外,常用的还有 RECORD ,表示一条记录。

■赋值 赋值和Pascal有点像:“变量 := 表达式;” 有些奇怪的是连接字符串的是“||”,比如 sql := ‘SELECT * FROM’ || table || ‘WHERE …’;

■判断 判断又和VB有些像: IF 条件 THEN … ELSEIF 条件 THEN … ELSE … END IF;

■循环 循环有好几种写法: WHILE expression LOOP statements END LOOP; 还有常用的一种是:(从1循环到9可以写成FOR i IN 1..9 LOOP) FOR name IN [ REVERSE ] expression .. expression LOOP statements END LOOP;

■其他 还有几个常用的函数: SELECT INTO record …; 表示将select的结果赋给record变量(RECORD类型) PERFORM query; 表示执行query并丢弃结果 EXECUTE sql; 表示执行sql语句,这条可以动态执行sql语句(特别是由参数传入构造sql语句的时候特别有用)

--简单的例子:

例1:无返回值

CREATE OR REPLACE FUNCTION 函数名称( 参数1,参数2,...)

AS

$BODY$

DECLARE --定义

BEGIN

INSERT INTO "表名" VALUES(参数1,参数2,...);

END

$BODY$

LANGUAGE 'plpgsql' VOLATILE; -- 最后别忘了这个。

例2:有返回值

CREATE OR REPLACE FUNCTION 函数名称(deptcode VARCHAR(20) ,deptname VARCHAR(60) ,pycode VARCHAR(60),isenabled CHAR(1))

RETURNS BOOLEAN --返回值,布尔类型

AS

$body$

DECLARE

deptcode VARCHAR(20);

deptname VARCHAR(60);

pycode VARCHAR(60);

isenabled CHAR(1);

BEGIN

UPDATE "deptDict" SET deptcode=deptcode,deptname=deptname,pycode=pycode,isenabled=isenabled,updatedhisdatetime=CURRENT_TIMESTAMP

WHERE deptcode=deptcode;

RETURN TRUE;

END

$body$

LANGUAGE 'plpgsql' VOLATILE;

最后再加上如何执行这个存储过程(函数)

-- 执行存储过程方法1

SELECT * FROM 函数名称(参数1,参数2,...)

-- 执行存储过程方法2

SELECT 函数名称('0参数1,参数2,...)

postgresql无法创建触发器

PostgreSQL的触发可以指定触发操作前尝试一行(在检查约束之前INSERT,UPDATE或DELETE)或操作完成后(在检查约束之后和INSERT,UPDATE或DELETE(删除)已完成),或替代的操作(在视图上插入,更新或删除的情况下)..

FOR EACH ROW触发器被标记的操作修改的每一行被称为一次。相比之下,FOR EACH STATEMENT触发器为只执行一次对于任何给定的操作,不管它有多少行修改。

WHEN子句和触发器动作可能访问的行元素被插入,删除或更新使用的形式NEW.column-name和OLD.column-name,其中列名是从表中的列名的引用该触发器相关联的。

如果提供WHEN子句,PostgreSQL的报表只执行WHEN子句为true的行。如果没有提供WHEN子句,PostgreSQL的语句执行的所有行。

如果有多个相同类型的触发器定义了相同的事件,他们将被触发名称是按字母顺序排列。

BEFORE,AFTER或INSTEAD OF关键字决定何时触发动作将被执行,相对于插入,修改或移除相关的行。

触发器表,它们与丢弃时自动删除。 yiibai.com

要修改的表必须存在,在同一数据库中的表或视图,触发器被附加,必须使用表名而不使用database.tablename。

约束时指定的选项创建一个约束触发器。这是一个普通的触发器除外,可以调整使用SET(设定)约束的触发器触发的定时相同。预计约束触发器违反他们所实施的限制时引发异常..


文章标题:postgresql无的简单介绍
本文路径:http://cdweb.net/article/dscdeei.html