日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2024/1/18 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【PostgreSQL】官网学习使用 PL/pgSQL编写造数据脚本 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 前言
    • 2. 成果
    • 3. 創(chuàng)建與使用類似 Java map 的數(shù)據(jù)結(jié)構(gòu)
      • 3.1 聲明數(shù)組
      • 3.2 數(shù)組賦值
      • 3.3 數(shù)組遍歷
    • 4. 如何打印調(diào)試信息 (可以用來生成回滾語(yǔ)句)
    • 5. 后記

1. 前言

前段時(shí)間需要大量造數(shù)據(jù),寫Java程序做造數(shù)據(jù)的活感覺太笨重了,遂下班后學(xué)習(xí)了 PL/pgSQL 寫腳本。公司用的是11.5的版本。按照 官網(wǎng)的Manual ,把下面的問題搞清楚,就能實(shí)現(xiàn)大部分的需求了,有其他經(jīng)驗(yàn)的時(shí)候再來補(bǔ)充。

  • 如何聲明、修改、刪除一個(gè)函數(shù)
  • 如何在函數(shù)中聲明與使用局部變量
  • 如何創(chuàng)建與使用類似 Java map 的數(shù)據(jù)結(jié)構(gòu)
  • 如何使用循環(huán)等其他控制語(yǔ)句
  • 如何打印調(diào)試信息 (可以用來生成回滾語(yǔ)句)

2. 成果

  • 放個(gè)極簡(jiǎn)單的批量新增腳本
-- 批量插入 -- _configList 使用 “_” 前綴來標(biāo)識(shí)變量,用于區(qū)分sql中的字段 CREATE OR REPLACE FUNCTION batchInsert(_configList varchar[][], _main_id int) RETURNS void AS $$ DECLARE_config varchar[];_content varchar;_amount int; BEGIN-- 獲取二維數(shù)組的每個(gè)一維數(shù)組FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP_content := _config[1];_amount := _config[2];-- 把變量輸出到控制臺(tái) RAISE NOTICE 'config = %, content = %, amount = % main_id = %', _config, _content, _amount, _main_id;-- 用變量拼接sql語(yǔ)句并且實(shí)際運(yùn)行在server上INSERT INTO public.main_history (amount, content, main_id) VALUES (_amount, _content, _main_id);END LOOP; END; $$ LANGUAGE plpgsql;-- 使用函數(shù) select batchInsert(ARRAY[['ccontent1', '1'], ['content2', '2']], 1);-- 刪除函數(shù) drop function batchInsert;

3. 創(chuàng)建與使用類似 Java map 的數(shù)據(jù)結(jié)構(gòu)

創(chuàng)建高級(jí)的數(shù)據(jù)結(jié)構(gòu)變量,官網(wǎng)這一塊是缺失的,遂使用二維數(shù)組來實(shí)現(xiàn)需求。
PS: 數(shù)組相關(guān)的內(nèi)容官網(wǎng)有很多,這里只記錄與實(shí)現(xiàn)需求有關(guān)的用法。

3.1 聲明數(shù)組

  • 聲明的時(shí)候可以不額外區(qū)分一維、二維數(shù)組
    _configList varchar[][] 和 _configList varchar[] 是一樣的

3.2 數(shù)組賦值

  • 聲明為varchar后,賦值時(shí)也要是varchar類型。 _configList varchar[][] := (ARRAY[['ccontent1', '1'], ['content2', '2']]);

3.3 數(shù)組遍歷

  • 二維數(shù)組的遍歷,官網(wǎng)提供語(yǔ)法:-- _configList 由外界傳入, 值得一提的是 FOREACH SLICE IN ARRAY 都是關(guān)鍵字 FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP_content := _config[1];_amount := _config[2]; END LOOP;

4. 如何打印調(diào)試信息 (可以用來生成回滾語(yǔ)句)

官網(wǎng) Manual 講的足夠詳細(xì)了。這里有啟發(fā)的地方在于生成回滾語(yǔ)句。之前記錄過 一些小技巧。

5. 后記

后續(xù)看官網(wǎng)發(fā)現(xiàn) PostgreSQL 能夠直接集成 Python,集成后可以直接用Python的語(yǔ)法寫腳本。如:

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

又多了個(gè)動(dòng)機(jī)學(xué)Python了~

總結(jié)

以上是生活随笔為你收集整理的【PostgreSQL】官网学习使用 PL/pgSQL编写造数据脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。