mysql迁移至postgresql_PostgreSQL PL/PostgreSQL 程序语言系列一

文章转载自公众号AustinDatabases

年龄到底是不是一个问题,35岁是一个坎, 招聘中有一些门槛这不奇怪,奇怪的是那这些信息去贩卖的人, 让整体的中国中年人活在焦虑和不安中,这绝对不是一个好人应该做的事情, 小范围的事实是可以控制的, 而肆无忌惮的"大喇叭",甚至歪曲部分内容,到底要利用这些信息吸引流量,造成全社会的恐惧, 你心安吗? 

年龄到底是不是一个问题,其实看个体,个人秉着不学点什么就难受的精神并未受到那些歪曲事实的信息的影响, 又开始了新的一个星期的文字.

DB层关于语言的能力其实是在下降的,尤其在使用了NOSQL, 以及MYSQL 后,数据库本身的语言SQL的能力变得不再重要,或不再需要,这也就导致,ORALCE、SQL SERVER的先辈们的那些过程语言被抛弃. POSTGRESQL本身也是有强大PL/PGSQL的, 有些环节和场景, 写好PL/PGSQL也是一种能力.

正文本系列也是根据一本POSTGRESQL SERVER Programming的书而来的,其中可能有一些个人的扩展,和例子.

80472facf78ce58d141fecf2ee925e29.png

The simplest and least powerful way of looking at server programming is to view the database as a data bucket. 

这段的第一句,在服务器程序领域将数据库看成一个数据容器是最简单和无技术含量的.

ea7d3b71eabf7de81751fcd9ba6f9daa.png

上面这段就不在解释了,有点含沙射影某数据库,从某种角度来看他说的不无道理,如果一次能批处理数据,但还要一行行的通过主键来处理,的确是drawbacks.

a4078fa4e1ffc3fb99b4f7f46918fdae.png

此书的作者是一个有着27年工作经验的人士,上这段话可以看出作者还是有两把刷子的. 其中提到, 以客户为中心的程序开发理论中总是将数据库与存储过程进行隔离, 其设计的目标通常是源于让应用程序来控制整个业务的逻辑,应用开发非常重要,而数据库则就是一个必须存在的"非必须".

4c8cf0538d4df415c3cf9c1422a3bbec.png

这样的观点就类似你有一台奔驰AMG45 ,但你却那他当一辆奔驰C200开.数据库被大材小用了. 

所以到此为止,上面的一段解释了为什么要学习PL/PGSQL以及部分继续使用存储过程人的一些观点. 

画了一张图,来表达作者想要莫奥数的两种应用程序架构不同的设计思路和想法

4ff89546b69586ef8ceae8ebc8bf8998.png

角度1 我们可以理解为,NOSQL、MYSQL

角度2  我们可以理解为ORACLE、SQL SERVER、POSTGERSQL

个人认为传统数据库和NOSQL、NEWSQL在应用程序的角度的不同点,这里是算是一个重点.所以你没有听过MYSQL SQL.因为只要是MYSQL一定是和高并发,小事务有关的,存储过程在MYSQL的应用场景是无法存活的.

下面就从POSTGRESQL的函数开始,四个部分建立一个PG函数,传递参数,如何在内部控制函数,从函数内部返回一个结果.

5710b1a7ba2fd597634ecdfe34d00527.png

CREATE FUNCTION mid(varchar, integer, integer) RETURNS varcharAS $$BEGINRETURN substring($1,$2,$3);END;$$LANGUAGE plpgsql;SELECT public.mid('Kirk L. Roybal',9,1);

328269092772e9768aeb2eb2cfdea8a7.png

上面的函数定义了,传入的参数的数据类型,以及返回数据的类型,通过$$来界定存储过程$$并且在最下面标注上的函数的语言是plpgsql.通过return来讲结果返回.

这里多说一句POSTGRESQL的函数和存储过程,是可以通过其他语言来进行撰写C 、PYTHON等都是可以.

下面以一个简单的例子来结束今天的文字

下面需要一个函数,在程序中调用,输入一个值,对输入的值的原值,原值基础上增加100, 原值与随机值的乘积,以及取输入值中最大的整数值,四舍五入进行插入.如果这个使用程序编写和调用函数比较, 相对的还是调用函数比较简单.

6fb50f372deadfbfdcbb660bb659bce6.png

ec71560c82b217157fda4ff0faa86381.png

create  table  camulate (id SERIAL primary key,base_number numeric,base_100 numeric,round numeric,ceil_s numeric)CREATE or Replace FUNCTION insert_s(numeric) RETURNS varcharAS $$BEGINinsert into camulate (base_number,base_100,round,ceil_s) values ($1,$1+100,random()*$1,ceiling($1));RETURN $1;END;$$LANGUAGE plpgsql;                                                select insert_s(1);select insert_s(1.4444);select insert_s(2.7039);

fcaa71b0c51864a7ede052d9f88fad67.png

另外可能还牵扯一个灵活性的问题,尤其函数,如果相关的功能变化,无论是JAVA还是.NET都需要重新修改程序和打包,部署.如果采用了函数的方式,修改和更新都要较程序简单.当然有些程序中无度不区分应用场景使用存储过程和函数,造成性能问题的另说,但不能将其归罪与存储过程和函数本身,终究是使用的那些人的水平才应该是被.......

I Love PG

关于我们

中国开源软件推进联盟PostgreSQL分会(简称:中国PG分会)于2017年成立,由国内多家PostgreSQL生态企业所共同发起,业务上接受工信部中国电子信息产业发展研究院指导。中国PG分会是一个非盈利行业协会组织。我们致力于在中国构建PostgreSQL产业生态,推动PostgreSQL产学研用发展。

欢迎投稿

做你的舞台,show出自己的才华 。

投稿邮箱:partner@postgresqlchina.com

                    ——愿能安放你不羁的灵魂

技术文章精彩回顾PostgreSQL学习的九层宝塔PostgreSQL职业发展与学习攻略2019,年度数据库舍 PostgreSQL 其谁?Postgres是最好的开源软件PostgreSQL是世界上最好的数据库从Oracle迁移到PostgreSQL的十大理由从“非主流”到“潮流”,开源早已值得拥有PG活动精彩回顾创建PG全球生态!PostgresConf.CN2019大会盛大召开首站起航!2019“让PG‘象’前行”上海站成功举行走进蓉城丨2019“让PG‘象’前行”成都站成功举行中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行群英论道聚北京,共话PostgreSQL相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报相知巴厘岛| PG Conf.Asia 2019 DAY2简报独家|硅谷Postgres大会简报直播回顾 | Bruce Momjian:原生分布式将在PG 14版本发布PG培训认证精彩回顾中国首批PGCA认证考试圆满结束,203位考生成功获得认证!中国第二批PGCA认证考试圆满结束,115位考生喜获认证!重要通知:三方共建,中国PostgreSQL认证权威升级!近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!2020年首批 | 中国PostgreSQL初级认证考试圆满结束一分耕耘一分收获,第五批次PostgreSQL认证考试成绩公布
PG 专辑 预览阅读开源软件联盟PostgreSQL分会专辑之活动篇

7e56bc81faa24a45ced59e54df67590d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值