暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL PL/PostgreSQL 程序语言系列一

文章转载自公众号AustinDatabases

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    CREATE FUNCTION mid(varchar, integer, integer) RETURNS varchar
    AS $$
    BEGIN
    RETURN substring($1,$2,$3);
    END;
    $$
    LANGUAGE plpgsql;

    SELECT public.mid('Kirk L. Roybal',9,1);

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

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

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

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

      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 varchar
      AS $$
      BEGIN
      insert 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);

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


      I Love PG

      关于我们

      PostgreSQLPG2017PostgreSQLPG非盈利行业协会组织。我们致力于在中国PostgreSQLPostgreSQL


      欢迎投稿

      做你的舞台,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分会专辑之活动篇

      文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论