文章目录

  • 1. 前言
  • 2. 成果
  • 3. 创建与使用类似 Java map 的数据结构
    • 3.1 声明数组
    • 3.2 数组赋值
    • 3.3 数组遍历
  • 4. 如何打印调试信息 (可以用来生成回滚语句)
  • 5. 后记

1. 前言

前段时间需要大量造数据,写Java程序做造数据的活感觉太笨重了,遂下班后学习了 PL/pgSQL 写脚本。公司用的是11.5的版本。按照 官网的Manual ,把下面的问题搞清楚,就能实现大部分的需求了,有其他经验的时候再来补充。

  • 如何声明、修改、删除一个函数
  • 如何在函数中声明与使用局部变量
  • 如何创建与使用类似 Java map 的数据结构
  • 如何使用循环等其他控制语句
  • 如何打印调试信息 (可以用来生成回滚语句)

2. 成果

  • 放个极简单的批量新增脚本
-- 批量插入
-- _configList 使用 “_” 前缀来标识变量,用于区分sql中的字段
CREATE OR REPLACE FUNCTION batchInsert(_configList varchar[][],  _main_id int) RETURNS void AS $$
DECLARE_config varchar[];_content varchar;_amount int;
BEGIN-- 获取二维数组的每个一维数组FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP_content := _config[1];_amount  := _config[2];-- 把变量输出到控制台    RAISE NOTICE 'config = %, content = %, amount = % main_id = %', _config, _content, _amount, _main_id;-- 用变量拼接sql语句并且实际运行在server上INSERT INTO public.main_history (amount, content, main_id) VALUES (_amount, _content, _main_id);END LOOP;
END;
$$ LANGUAGE plpgsql;-- 使用函数
select batchInsert(ARRAY[['ccontent1', '1'], ['content2', '2']], 1);-- 删除函数
drop function batchInsert;

3. 创建与使用类似 Java map 的数据结构

创建高级的数据结构变量,官网这一块是缺失的,遂使用二维数组来实现需求。
PS: 数组相关的内容官网有很多,这里只记录与实现需求有关的用法。

3.1 声明数组

  • 声明的时候可以不额外区分一维、二维数组
    _configList varchar[][]_configList varchar[] 是一样的

3.2 数组赋值

  • 声明为varchar后,赋值时也要是varchar类型。

      _configList varchar[][] := (ARRAY[['ccontent1', '1'], ['content2', '2']]);
    

3.3 数组遍历

  • 二维数组的遍历,官网提供语法:

    -- _configList 由外界传入, 值得一提的是 FOREACH  SLICE IN ARRAY 都是关键字
    FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP_content := _config[1];_amount  := _config[2];
    END LOOP;
    

4. 如何打印调试信息 (可以用来生成回滚语句)

官网 Manual 讲的足够详细了。这里有启发的地方在于生成回滚语句。之前记录过 一些小技巧。

5. 后记

后续看官网发现 PostgreSQL 能够直接集成 Python,集成后可以直接用Python的语法写脚本。如:

CREATE FUNCTION pymax (a integer, b integer)RETURNS integer
AS $$if a > b:return areturn b
$$ LANGUAGE plpythonu;

又多了个动机学Python了~

【PostgreSQL】官网学习使用 PL/pgSQL编写造数据脚本相关推荐

  1. postgresql 官网学习文档

    pg数据官网学习文档,PostgreSQL: Documentation 中文版:文档目录/Document Index: 世界上功能最强大的开源数据库...

  2. Spring AOP官网学习

    Spring AOP官网学习 5.1 AOP概念 让我们从定义一些核心的AOP概念和术语开始.这些术语并不是spring特有的.不幸的是,AOP术语不是特别直观. 1.Aspect(方面):跨多个类的 ...

  3. PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.

    PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected. 问题描述 termi ...

  4. PostgreSQL 11 新特性之 PL/pgSQL 增强

    文章目录 PostgreSQL 11 增加了一个新的编程对象,存储过程(PROCEDURE).它与存储函数类似,但是没有返回值.存储过程还支持事务,参考文章"PostgreSQL 11 新特 ...

  5. Spring官网学习(一)概述

    文章目录 1.Spring官网简介 2.Spring总览 2.1.什么是Spring 2.2.Spring的发展历程 3.Spring的设计理念 3.1.Spring的优点 4.IOC和AOP浅析 4 ...

  6. Angular官网学习笔记

    Angular官网学习笔记 一.Angular概述 **什么是Angular:**一个基于TypeScript构建的开发平台包括: 一个基于组件的框架,用于构建可伸缩的Web应用 一组完美集成的库,涵 ...

  7. knockout+html绑定,Knockout.Js官网学习(style绑定、attr绑定)

    Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...

  8. Python爬取国家统计局官网最新全国所有城市县镇数据

    最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...

  9. TokenInsight官网上线BTC永续合约流动性实时数据 | TokenInsight

    ↯ 要点总结 TokenInsight官网上线BTC永续合约流动性实时数据,详情请点击阅读原文. TokenInsight • END 微信小程序 Tokenin 指数 | 项目GitHub代码提交次 ...

最新文章

  1. c# 字典按ascii 排序_利用工作表函数,对字典键进行排序并给出对应重复个数
  2. 谷歌浏览器添加JSON-Handle插件
  3. python声明编码作用_Python源代码中的编码声明字符串的作用
  4. Spark _13_topN
  5. 折叠玻璃体球囊手术介绍
  6. css 深度选择器 ,CSS的coped私有作用域和深度选择器
  7. curl 增加header_libcurl增加HTTP header 和 POST之后获取返回数据
  8. using filesort和using temporary
  9. Python数据结构与算法笔记(二):递归介绍及汉诺塔问题
  10. uva 436(floyd变形)
  11. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_14-webpack研究-webpack-dev-server...
  12. word文档无法保存问题
  13. 单片机输入和输出模式简要说明
  14. python网络编程案例—五子棋游戏
  15. 汇顶科技外包java_【汇顶科技有限公司Java面试】2020春季校招后端Java-看准网
  16. Android 开发Usb知识
  17. 控制算法-PID算法总结-从公式原理到参数整定解析(附C源码)
  18. java学习day38(Linux)Linux、命令
  19. 快速上手opencv_contrib安装(Windows11)
  20. docker-compose快速启动mysql和redis(提供外部客户端可连接)

热门文章

  1. python爬虫基础之AJAX页面的抓取
  2. LightSwitch文件的上传,下载及保存(数据库版)
  3. 计算机动画实验(一)OpenGL实现关键帧动画
  4. SDOI2011_染色
  5. 共轭梯度法(Conjugate Gradients)(2)
  6. 【Unity之c#专题篇】—核心章题单实践
  7. _beginThreadex的用法
  8. 利用python爬取qq个性网图片
  9. ExoPlayer 监听播放器播放完成 播放孔娜
  10. php博客怎么上线,老张博客上线啦(二)