SlideShare a Scribd company logo
PostgreSQL Conference JPPostgreSQL Conference JP
(2017-11-03)(2017-11-03)
あなたとあなたと PL/pgSQL,PL/pgSQL,
いますぐいますぐ
CREATE FUNCTIOCREATE FUNCTIO
NN
ぬこ@横浜ぬこ@横浜 (@nuko_yokohama)(@nuko_yokohama)
2
自己紹介
「 PostgreSQL ラーメン」
でググってください。
青島チャーシュー@青島食堂青島チャーシュー@青島食堂
3
日本一ぽすぐれを
無駄に使うマンを
目指して修行中です
4
今日も
役に立たない話で
すまんな
5
みなさん、
PL/pgSQL
使ってますか?
6
PL/pgSQL を使用することの利点
( PostgreSQL 9.6.5 文書より)
クライアント・サーバ間の余計なやり取
りを排除する。
クライアントサーバ間において、クライ
アントに不必要な中間結果の整理と転送
を不要とする。
一連の問い合わせに、複数の解析が不要
である。
7
PostgreSQL 機能と
組み合わせると
色々楽しいことが
できたりする
8
Oracle PL/SQL の
移行で使うだけじゃ
もったいない
9
明日からすぐ使えそうにもない
PL/pgSQL スクリプトの紹介
pg_banner
tategaki
get_database_cluster_size
load_json_file
pg_reversi
pg_lifegame
10
pg_banner
11
postgres=# SELECT * FROM pg_banner('PostgreSQL 10.0');
data
--------------------------------------------------------------------------------------------------------------
###### ####### ##### ####### ##### ###### ####### ##### ##### # # #### ####
# # # # # # # # # # # # # # # # # ## # ## # ##
# # # # # # # # # # # # # # # # # # # # # #
###### # # ##### # # #### ###### ##### ##### # # # # # # # # # #
# # # # # # # # # # # # # # # # ## # ### ## #
# # # # # # # # # # # # # # # # # # # ### # #
# ####### ##### # ##### # # ####### ##### #### # ####### ##### #### ### ####
(7 rows)
英数字の巨大文字を作る。そんだけ。
昔、 Unix にこんなコマンドがあったら
しい
SQL 標準や PostgreSQL 提供関数にな
かったので作った
12
$ more ~/.psqlrc
SELECT data AS "PostgreSQL 起動! " FROM (SELECT * FROM pg_banner('Oracle 18c')) t
$ psql -U postgres postgres
PostgreSQL 起動!
-------------------------------------------------------------------------
####### ###### # ##### # ####### # ### #####
# # # # # # # # # # ## # # # #
# # # # # # # # # # # # # #
# # ###### # # # # ##### # ### #
# # # # ####### # # # # # # #
# # # # # # # # # # # # # # #
####### # # # # ##### ####### ####### ##### ### #####
(7 rows)
psql (10.0)
Type "help" for help.
postgres=#
psql 起動スクリプトに
組み込むと少し派手になる
13
UNION と ORDER BY で
巨大文字作成関数を 1 文字毎に作成
巨大文字作成関数を ROWS FROM で並
べて仮想表を作成
仮想表の検索結果を文字列連結して 1
行分作成
rowtype
RETURN NEXT
くだらないことを一生懸命にやる精神
14
tategaki
15
tategaki
お正月に PostgreSQL を使っていて、
16
postgres=# SELECT * FROM
tategaki(' 町田は神奈川 ') AS " 書初 ";
書初
------
神町 +
奈田 +
川は +
(1 row)
書き初めをしたいときや、
17
tategaki
18
仕事中に PostgreSQL を使っていて
漢詩を作りたいときに活用していきたい
postgres=# SELECT * FROM tategaki(
' 煮豆持作羹漉豉以爲汁萁在釜下然 '
' 豆在釜中泣本自同根生相煎何太急 ',
6, 5) AS " 七歩詩 by 曹植 ";
七歩詩 by 曹植
----------------
相本豆萁漉煮 +
煎自在在豉豆 +
何同釜釜以持 +
太根中下爲作 +
急生泣然汁羹 +
19
縦書きイメージの配列定義
FOR IN LOOP ... LOOP END
行 / 列の変換
array_to_string() で結合
くだらないことを一生懸命にやる精神
20
get_database_cluster_size
21
[nuko@localhost 10]$ ls
PG_VERSION pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wal postgresql.conf
base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact postmaster.opts
global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.conf postmaster.pid
[nuko@localhost 10]$ du -s -b .
261896653 .
[nuko@localhost 10]$ psql -U postgres postgres -c "SELECT get_database_cluster_size()"
get_database_cluster_size
---------------------------
261896653
(1 row)
データベースサイズ取得関数
(pg_database_size)→ ある
データベースクラスタサイズ取得の SQL
関数→ない
特権ユーザのみ実行可能
なんか役に立ちそうなので負けた気分
22
pg_stat_file()
レコード変数への格納と参照
サイズの取得
ファイル種別(通常ファイル / ディレ
クトリ)の取得
PL/pgSQL 関数の再帰呼出し
23
load_json_file
24
JSON 文書
( COPY 入力形式)
{" 書名 ":”XXX”,
" 著者 ":"aaa", ...}
{" 書名 ":”YYY”,
" 著者 ":"bbb", …}
・・・
load_json_file()
書名 著者 ・・・
XXX aaa ・・・
YYY bbb ・・・
・・・ ・・・ ・・・
読み込み
ロード先のテーブルを
自動生成
( 列名 , 型を取得)
データロード
AWS S3 上の XML ファイルを
Aurora にロードするサービスが
あるという記事を見て、
なんとなく作ってみた
ロード先のテーブル
ポイント:型の自動推定
25
$ cat /tmp/load.json
{" 書名 ":" 働けメロス ", " 著者 ":" ださいおさむ ", " 値段 ":580}
{" 著者 ":" にゃつめそうせき ", " 書名 ":" 俺様はぬこである ", " 値段 ":1280}
{" 書名 ":" 猫でも分かるぽすぐれ ", " 値段 ":3500, " 著者 ":" ぬこ@横浜 " }
$ cat /tmp/append.json
{" 書名 ":" わたしと話さないで ", " 著者 ":" カズオ・ブラックストーン ", " 値段 ":980}
$
関数実行
JSON ファイル
$ psql json -c "SELECT load_json_file('/tmp/load.json', 'book', true)"
NOTICE: table "book" does not exist, skipping
load_json_file
----------------
0
(1 row)
$ psql json -c "SELECT load_json_file('/tmp/append.json', 'book', false)"
load_json_file
----------------
0
(1 row)
true のときには
テーブルを生成
false は
追加ロード用
26
$ psql json -c "d book"
Table "public.book"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
値段 | numeric | | |
書名 | text | | |
著者 | text | | |
ロードされたデータを参照
生成されたテーブルの構造
$ psql json -c "TABLE book"
値段 | 書名 | 著者
------+----------------------+--------------------------
580 | 働けメロス | ださいおさむ
1280 | 俺様はぬこである | にゃつめそうせき
3500 | 猫でも分かるぽすぐれ | ぬこ@横浜
980 | わたしと話さないで | カズオ・ブラックストーン
(4 rows)
27
1 行目の JSON 文書から各列の型を推定
(json_each(), json_typeof())
してテーブルを自動生成
DDL/DML 動的生成と実行
一旦中間テーブルに COPY して自動生成
した DML(INSERT ... SELECT ...) で
自動生成したテーブルにロードする
実用的なのかどうか微妙なあたりが
ぬこクオリティだよな。
28
pg_reversi
29
pg_reversi
去年の PGCONF.Asia の全発表内で
もっともくだらない LT
https://www.slideshare.net/toshiharada/pgconf-asia201612203pg-reversi
30
pg_reversi
頭の悪い ( 一手先しか読まな
い) COM 戦の実装を検討中
31
pg_lifegame
32
人類の未来・・・
33
PostgreSQL で Life Game
残業中に PostgreSQL を使いながら
人類の未来に思いを馳せたいときに
NOTICE:
life game (gen=1, lifes=81)
 ●      ●   ●  ●
●  ●●●  ●   ●●●  
      ●●●       
●    ●    ●● ●   
  ●●    ● ●   ● 
  ●    ●        
  ●    ●   ●  ●●
 ● ●  ●  ● ● ●●●
    ●●  ●       
 ●● ●     ●  ●●●
    ●● ● ●  ●  ●
       ●●   ●●  
 ● ●  ● ●●   ●  
●    ●● ●●  ●    
●●   ●●● ●    ●●●
$ psql -U postgres life -c "SELECT pg_lifegame(16, 1, '●', '   ')"
我々はどこから来たのか 我々は何者か 我々はどこへ行くのか
NOTICE:
life game (gen=2, lifes=102)
 ●●●       ●●●  
 ●●●  ●    ●●●  
 ●  ●●●●●●●  ●  
   ●      ●●    
 ●●●    ● ●●    
 ●●    ●●     ●●
 ●●●  ●●● ● ●● ●
  ●●●●●●● ● ●● ●
 ●  ●●   ●● ●   
      ● ●●   ●●●
   ●●●●● ● ●●  ●
    ●●      ●●● 
    ●●●  ●   ●  
●  ●●        ●●  
●●   ● ● ●     ● 
     ●        ● 
NOTICE:
life game (gen=3, lifes=74)
 ● ●       ● ●  
●      ● ●●    ● 
 ●  ●●●●●●   ●  
 ● ● ●●     ●   
 ● ●   ●● ●●    
●      ●   ● ●●●●
            ●  ●
          ●     
  ●       ● ●  ●
   ●         ●●●
   ●   ● ●●●   ●
       ●● ●●  ● 
      ●         
●  ●●  ●●    ●●● 
●●●●●●         ● 
     ●          
34
PL/pgSQL のループ処理とテキスト処理を
駆使してライフゲームの処理を行う
表示機能は PL/pgSQL の
RIASE NOTICE を利用
AWS RDS/Aurora でも無駄に使える
(はず)
くだらないことを一生懸命にやる精神
35
おわりに
36
今回使った
PL/pgSQL スクリプト
https://github.com/nuko-yokohama/pg_scripts
https://github.com/nuko-yokohama/pg_reversi
37
イケてる ( イカれている )
PL/pgSQL スクリプトが
あったら / 作ったら
紹介してください
38
あなたと PL/pgSQL,
いますぐ
CREATE FUNCTIO
N
39
おしまい

More Related Content

What's hot

Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancherRancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Tetsurou Yano
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
Insight Technology, Inc.
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
yoku0825
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール弘毅 露崎
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレする
Akihiro Kuwano
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
Yasuhiro Matsuo
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
Toshi Harada
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
yoku0825
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムHitoshi Asai
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
Craft works
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料kasaharatt
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
yoku0825
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索techtalkdwango
 
How to backup your mroonga database?
How to backup your mroonga database?How to backup your mroonga database?
How to backup your mroonga database?
yoku0825
 

What's hot (20)

Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancherRancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレする
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
How to backup your mroonga database?
How to backup your mroonga database?How to backup your mroonga database?
How to backup your mroonga database?
 

Similar to 20171103 pg con-jp-lt-plpgsql

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
Tomoya Kawanishi
 
JSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使うJSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使う
Yuki Takeichi
 
大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れるShuhei Iitsuka
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能について
Tomoya Kawanishi
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Masahiko Sawada
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
Toshio Ehara
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Yoshinori Nakanishi
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方Toshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
NTT DATA Technology & Innovation
 
Excel2 canvas
Excel2 canvasExcel2 canvas
Excel2 canvas
Shunji Konishi
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
Satoshi Yamada
 

Similar to 20171103 pg con-jp-lt-plpgsql (20)

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
JSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使うJSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使う
 
大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる
 
d3sparql.js
d3sparql.js d3sparql.js
d3sparql.js
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能について
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
 
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
Excel2 canvas
Excel2 canvasExcel2 canvas
Excel2 canvas
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 

More from Toshi Harada

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
Toshi Harada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
Toshi Harada
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
Toshi Harada
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
Toshi Harada
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
Toshi Harada
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
Toshi Harada
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
Toshi Harada
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
Toshi Harada
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
Toshi Harada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
Toshi Harada
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
Toshi Harada
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
Toshi Harada
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
 

More from Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 

Recently uploaded

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 

Recently uploaded (15)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 

20171103 pg con-jp-lt-plpgsql

  • 1. PostgreSQL Conference JPPostgreSQL Conference JP (2017-11-03)(2017-11-03) あなたとあなたと PL/pgSQL,PL/pgSQL, いますぐいますぐ CREATE FUNCTIOCREATE FUNCTIO NN ぬこ@横浜ぬこ@横浜 (@nuko_yokohama)(@nuko_yokohama)
  • 6. 6 PL/pgSQL を使用することの利点 ( PostgreSQL 9.6.5 文書より) クライアント・サーバ間の余計なやり取 りを排除する。 クライアントサーバ間において、クライ アントに不必要な中間結果の整理と転送 を不要とする。 一連の問い合わせに、複数の解析が不要 である。
  • 11. 11 postgres=# SELECT * FROM pg_banner('PostgreSQL 10.0'); data -------------------------------------------------------------------------------------------------------------- ###### ####### ##### ####### ##### ###### ####### ##### ##### # # #### #### # # # # # # # # # # # # # # # # # ## # ## # ## # # # # # # # # # # # # # # # # # # # # # # ###### # # ##### # # #### ###### ##### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # ## # ### ## # # # # # # # # # # # # # # # # # # # # ### # # # ####### ##### # ##### # # ####### ##### #### # ####### ##### #### ### #### (7 rows) 英数字の巨大文字を作る。そんだけ。 昔、 Unix にこんなコマンドがあったら しい SQL 標準や PostgreSQL 提供関数にな かったので作った
  • 12. 12 $ more ~/.psqlrc SELECT data AS "PostgreSQL 起動! " FROM (SELECT * FROM pg_banner('Oracle 18c')) t $ psql -U postgres postgres PostgreSQL 起動! ------------------------------------------------------------------------- ####### ###### # ##### # ####### # ### ##### # # # # # # # # # # ## # # # # # # # # # # # # # # # # # # # # ###### # # # # ##### # ### # # # # # ####### # # # # # # # # # # # # # # # # # # # # # # ####### # # # # ##### ####### ####### ##### ### ##### (7 rows) psql (10.0) Type "help" for help. postgres=# psql 起動スクリプトに 組み込むと少し派手になる
  • 13. 13 UNION と ORDER BY で 巨大文字作成関数を 1 文字毎に作成 巨大文字作成関数を ROWS FROM で並 べて仮想表を作成 仮想表の検索結果を文字列連結して 1 行分作成 rowtype RETURN NEXT くだらないことを一生懸命にやる精神
  • 16. 16 postgres=# SELECT * FROM tategaki(' 町田は神奈川 ') AS " 書初 "; 書初 ------ 神町 + 奈田 + 川は + (1 row) 書き初めをしたいときや、
  • 18. 18 仕事中に PostgreSQL を使っていて 漢詩を作りたいときに活用していきたい postgres=# SELECT * FROM tategaki( ' 煮豆持作羹漉豉以爲汁萁在釜下然 ' ' 豆在釜中泣本自同根生相煎何太急 ', 6, 5) AS " 七歩詩 by 曹植 "; 七歩詩 by 曹植 ---------------- 相本豆萁漉煮 + 煎自在在豉豆 + 何同釜釜以持 + 太根中下爲作 + 急生泣然汁羹 +
  • 19. 19 縦書きイメージの配列定義 FOR IN LOOP ... LOOP END 行 / 列の変換 array_to_string() で結合 くだらないことを一生懸命にやる精神
  • 21. 21 [nuko@localhost 10]$ ls PG_VERSION pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wal postgresql.conf base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact postmaster.opts global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.conf postmaster.pid [nuko@localhost 10]$ du -s -b . 261896653 . [nuko@localhost 10]$ psql -U postgres postgres -c "SELECT get_database_cluster_size()" get_database_cluster_size --------------------------- 261896653 (1 row) データベースサイズ取得関数 (pg_database_size)→ ある データベースクラスタサイズ取得の SQL 関数→ない 特権ユーザのみ実行可能 なんか役に立ちそうなので負けた気分
  • 24. 24 JSON 文書 ( COPY 入力形式) {" 書名 ":”XXX”, " 著者 ":"aaa", ...} {" 書名 ":”YYY”, " 著者 ":"bbb", …} ・・・ load_json_file() 書名 著者 ・・・ XXX aaa ・・・ YYY bbb ・・・ ・・・ ・・・ ・・・ 読み込み ロード先のテーブルを 自動生成 ( 列名 , 型を取得) データロード AWS S3 上の XML ファイルを Aurora にロードするサービスが あるという記事を見て、 なんとなく作ってみた ロード先のテーブル ポイント:型の自動推定
  • 25. 25 $ cat /tmp/load.json {" 書名 ":" 働けメロス ", " 著者 ":" ださいおさむ ", " 値段 ":580} {" 著者 ":" にゃつめそうせき ", " 書名 ":" 俺様はぬこである ", " 値段 ":1280} {" 書名 ":" 猫でも分かるぽすぐれ ", " 値段 ":3500, " 著者 ":" ぬこ@横浜 " } $ cat /tmp/append.json {" 書名 ":" わたしと話さないで ", " 著者 ":" カズオ・ブラックストーン ", " 値段 ":980} $ 関数実行 JSON ファイル $ psql json -c "SELECT load_json_file('/tmp/load.json', 'book', true)" NOTICE: table "book" does not exist, skipping load_json_file ---------------- 0 (1 row) $ psql json -c "SELECT load_json_file('/tmp/append.json', 'book', false)" load_json_file ---------------- 0 (1 row) true のときには テーブルを生成 false は 追加ロード用
  • 26. 26 $ psql json -c "d book" Table "public.book" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- 値段 | numeric | | | 書名 | text | | | 著者 | text | | | ロードされたデータを参照 生成されたテーブルの構造 $ psql json -c "TABLE book" 値段 | 書名 | 著者 ------+----------------------+-------------------------- 580 | 働けメロス | ださいおさむ 1280 | 俺様はぬこである | にゃつめそうせき 3500 | 猫でも分かるぽすぐれ | ぬこ@横浜 980 | わたしと話さないで | カズオ・ブラックストーン (4 rows)
  • 27. 27 1 行目の JSON 文書から各列の型を推定 (json_each(), json_typeof()) してテーブルを自動生成 DDL/DML 動的生成と実行 一旦中間テーブルに COPY して自動生成 した DML(INSERT ... SELECT ...) で 自動生成したテーブルにロードする 実用的なのかどうか微妙なあたりが ぬこクオリティだよな。
  • 29. 29 pg_reversi 去年の PGCONF.Asia の全発表内で もっともくだらない LT https://www.slideshare.net/toshiharada/pgconf-asia201612203pg-reversi
  • 33. 33 PostgreSQL で Life Game 残業中に PostgreSQL を使いながら 人類の未来に思いを馳せたいときに NOTICE: life game (gen=1, lifes=81)  ●      ●   ●  ● ●  ●●●  ●   ●●●         ●●●        ●    ●    ●● ●      ●●    ● ●   ●    ●    ●           ●    ●   ●  ●●  ● ●  ●  ● ● ●●●     ●●  ●         ●● ●     ●  ●●●     ●● ● ●  ●  ●        ●●   ●●    ● ●  ● ●●   ●   ●    ●● ●●  ●     ●●   ●●● ●    ●●● $ psql -U postgres life -c "SELECT pg_lifegame(16, 1, '●', '   ')" 我々はどこから来たのか 我々は何者か 我々はどこへ行くのか NOTICE: life game (gen=2, lifes=102)  ●●●       ●●●    ●●●  ●    ●●●    ●  ●●●●●●●  ●      ●      ●●      ●●●    ● ●●      ●●    ●●     ●●  ●●●  ●●● ● ●● ●   ●●●●●●● ● ●● ●  ●  ●●   ●● ●          ● ●●   ●●●    ●●●●● ● ●●  ●     ●●      ●●●      ●●●  ●   ●   ●  ●●        ●●   ●●   ● ● ●     ●       ●        ●  NOTICE: life game (gen=3, lifes=74)  ● ●       ● ●   ●      ● ●●    ●   ●  ●●●●●●   ●    ● ● ●●     ●     ● ●   ●● ●●     ●      ●   ● ●●●●             ●  ●           ●        ●       ● ●  ●    ●         ●●●    ●   ● ●●●   ●        ●● ●●  ●        ●          ●  ●●  ●●    ●●●  ●●●●●●         ●       ●          
  • 34. 34 PL/pgSQL のループ処理とテキスト処理を 駆使してライフゲームの処理を行う 表示機能は PL/pgSQL の RIASE NOTICE を利用 AWS RDS/Aurora でも無駄に使える (はず) くだらないことを一生懸命にやる精神
  • 37. 37 イケてる ( イカれている ) PL/pgSQL スクリプトが あったら / 作ったら 紹介してください