PostgreSQL DBA(6) - PG 11 New Features#3
标签:
SQL Server
PG 11即将正式发布,本节简单介绍了PG 11的新特性:PL/pgSQL增强和新增的配置参数。
一、PL/pgSQL
Procedure
PG 11新增了过程Procedure对象,类似Oracle的存储过程.
testdb=# create or replace procedure sp_proc1(in p1 text) as testdb-# $$testdb$# declare testdb$# v1 varchar(10); testdb$# begintestdb$# v1 := 'TEST'; testdb$# raise notice 'Parameter is : %',p1; testdb$# raise notice 'v1 is : %',v1; testdb$# end; testdb$# $$ testdb-# language plpgsql;CREATE PROCEDURE
过程使用CALL调用:
testdb=# call sp_proc1('test');NOTICE: Parameter is : test NOTICE: v1 is : TEST CALL
查看定义信息:
testdb=# \df sp_proc1 List of functions Schema | Name | Result data type | Argument data types | Type --------+----------+------------------+---------------------+------ public | sp_proc1 | | p1 text | proc (1 row) testdb=# \sf sp_proc1CREATE OR REPLACE PROCEDURE public.sp_proc1(p1 text) LANGUAGE plpgsql AS $procedure$ declare v1 varchar(10);begin v1 := 'TEST'; raise notice 'Parameter is : %',p1; raise notice 'v1 is : %',v1;end; $procedure$
过程中可以对事务进行控制,但如果过程在事务中调用,而过程中有事务控制语句,则"不太好使".
存储过程:
create or replace procedure sp_transaction(in p1 text) as $$begin if lower(p1) = 'commit' then commit; elsif lower(p1) = 'rollback' then rollback; else raise notice 'Invalid Parameter!'; end if;end; $$ language plpgsql;
测试场景:
testdb=# begin;BEGIN testdb=# insert into tt values(1);INSERT 0 1 testdb=# call sp_transaction('commit');ERROR: invalid transaction termination CONTEXT: PL/pgSQL function sp_transaction(text) line 4 at COMMIT testdb=# commit;ROLLBACK testdb=# commit;WARNING: there is no transaction in progress COMMIT
PL/pgSQL似乎没有类似于Oracle自治事务的概念(在存储过程中控制事务而与外层事务无关),不建议在过程/函数中使用事务,调用方统一管理事务.
变量定义
在函数或过程中,可定义变量为常量(CONSTANT关键字),并设置NOT NULL属性,详细请参照参考资料.
二、配置参数
新增的参数包括并行执行相关的参数如enable_parallel_hash等,详见下表(更详细的信息参照参考资料).
新增参数(1)
新增参数(2))
作者:EthanHe
链接:https://www.jianshu.com/p/191eb27cf367
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦