PostgreSQL DBA(6) - PG 11 New Features#3

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$# begin
testdb$#   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_proc1
CREATE 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))

三、参考资料

PostgreSQL 11 New Features With Examples(Beta 1)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,140评论 0 9
  • react-native-linear-gradient LinearGradient的属性: colorssta...
    boyrt阅读 7,026评论 0 3
  • 第一次知道濑户内海是去年,有幸赶上了三年一度的艺术祭,却因为时间不够人太多而留下了一丢丢遗憾,决心要再次拜访才行。...
    岛屿落日阅读 449评论 0 0
  • 1.权限控制脱敏数据(对不同权限设置脱敏或不脱敏) 2.安全合规规定。 3.高权限切换发现。 4.高风险命令统计,...
    巧巧哎阅读 196评论 0 0
  • 刚刚从周公那里回来,还没有什么额的感觉,所以决定先码完周记再去开小会吃饭,早上睡到9点多,等收拾好墨迹完就10点半...
    bu良青阅读 395评论 3 1