Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Toshi Harada
PDF, PPTX
2,684 views
Postgresql advent calender 2014 using jsonb by ecpg
using jsonb dataype by ecpg.
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 49
2
/ 49
3
/ 49
4
/ 49
5
/ 49
6
/ 49
7
/ 49
8
/ 49
9
/ 49
10
/ 49
11
/ 49
12
/ 49
13
/ 49
14
/ 49
15
/ 49
16
/ 49
17
/ 49
18
/ 49
19
/ 49
20
/ 49
21
/ 49
22
/ 49
23
/ 49
24
/ 49
25
/ 49
26
/ 49
27
/ 49
28
/ 49
29
/ 49
30
/ 49
31
/ 49
32
/ 49
33
/ 49
34
/ 49
35
/ 49
36
/ 49
37
/ 49
38
/ 49
39
/ 49
40
/ 49
41
/ 49
42
/ 49
43
/ 49
44
/ 49
45
/ 49
46
/ 49
47
/ 49
48
/ 49
49
/ 49
More Related Content
PPT
CPANの依存モジュールをもう少し正しく検出したい
by
charsbar
PDF
ECMAScript6による関数型プログラミング
by
TanUkkii
PDF
Rx java x retrofit
by
Shun Nakahara
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
by
博文 斉藤
PPTX
CMSとPerlで遊ぼう
by
Daiki Ichinose
PDF
MlnagoyaRx
by
Shoichi Kakamu
PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
PPT
2017年夏のPerl
by
charsbar
CPANの依存モジュールをもう少し正しく検出したい
by
charsbar
ECMAScript6による関数型プログラミング
by
TanUkkii
Rx java x retrofit
by
Shun Nakahara
GNU awk (gawk) を用いた Apache ログ解析方法
by
博文 斉藤
CMSとPerlで遊ぼう
by
Daiki Ichinose
MlnagoyaRx
by
Shoichi Kakamu
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
2017年夏のPerl
by
charsbar
What's hot
PPT
2017年春のPerl
by
charsbar
PDF
Everyday Life with clojure.spec
by
Kent Ohashi
PDF
Integral - New O/R Mapper for Common Lisp
by
fukamachi
PPT
サーバー実装いろいろ
by
kjwtnb
KEY
Shelly
by
fukamachi
PDF
GraphQL入門
by
Kent Ohashi
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
PDF
freee社でのReactiveCocoa活用例
by
yo_waka
PDF
MlnagoyaRx02
by
mega80b
ODP
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
by
m2ym
PDF
PaaSの作り方 Sqaleの場合
by
hiboma
PDF
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
by
parrotstudio
PDF
社内勉強会資料(Varnish Module)
by
Iwana Chan
PDF
Kotlin勉強会 in ehime
by
Eigoro Yamamura
PDF
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
by
博文 斉藤
PDF
メタメタプログラミングRuby
by
emasaka
PDF
VarnishではじめるESI
by
Iwana Chan
PDF
Spectacular Future with clojure.spec
by
Kent Ohashi
PDF
コンテナ情報交換会2
by
Masahide Yamamoto
KEY
20年越しで Perl 4 to 5 した話
by
outerinside
2017年春のPerl
by
charsbar
Everyday Life with clojure.spec
by
Kent Ohashi
Integral - New O/R Mapper for Common Lisp
by
fukamachi
サーバー実装いろいろ
by
kjwtnb
Shelly
by
fukamachi
GraphQL入門
by
Kent Ohashi
これからのJavaScriptー関数型プログラミングとECMAScript6
by
TanUkkii
freee社でのReactiveCocoa活用例
by
yo_waka
MlnagoyaRx02
by
mega80b
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
by
m2ym
PaaSの作り方 Sqaleの場合
by
hiboma
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
by
parrotstudio
社内勉強会資料(Varnish Module)
by
Iwana Chan
Kotlin勉強会 in ehime
by
Eigoro Yamamura
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
by
博文 斉藤
メタメタプログラミングRuby
by
emasaka
VarnishではじめるESI
by
Iwana Chan
Spectacular Future with clojure.spec
by
Kent Ohashi
コンテナ情報交換会2
by
Masahide Yamamoto
20年越しで Perl 4 to 5 した話
by
outerinside
Similar to Postgresql advent calender 2014 using jsonb by ecpg
PDF
20171103 pg con-jp-lt-plpgsql
by
Toshi Harada
PDF
Chugokudb study-20150131
by
Toshi Harada
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
by
Insight Technology, Inc.
PDF
20190119 aws-study-pg-extension
by
Toshi Harada
PDF
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
by
Insight Technology, Inc.
PDF
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
by
Insight Technology, Inc.
PDF
20181110 fok2018-pg-extension
by
Toshi Harada
PDF
外部データラッパによる PostgreSQL の拡張
by
Shigeru Hanada
PDF
PGCon.jp 2014 jsonb-datatype-20141205
by
Toshi Harada
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
by
Toshi Harada
PDF
Jpug study-jsonb-datatype-20141011
by
Toshi Harada
PDF
Kof2016 postgresql-9.6
by
Toshi Harada
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
PPTX
第51回NDS PostgreSQLのデータ型 #nds51
by
civicpg
PDF
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
by
Insight Technology, Inc.
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
by
Insight Technology, Inc.
PDF
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
by
NTT DATA Technology & Innovation
PDF
Chugokudb18_1
by
Kosuke Kida
PDF
JSONB型でpostgresをNoSQLっぽく使う
by
Yuki Takeichi
20171103 pg con-jp-lt-plpgsql
by
Toshi Harada
Chugokudb study-20150131
by
Toshi Harada
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
by
Insight Technology, Inc.
20190119 aws-study-pg-extension
by
Toshi Harada
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
by
Insight Technology, Inc.
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
by
Insight Technology, Inc.
20181110 fok2018-pg-extension
by
Toshi Harada
外部データラッパによる PostgreSQL の拡張
by
Shigeru Hanada
PGCon.jp 2014 jsonb-datatype-20141205
by
Toshi Harada
Osc2015 hokkaido postgresql-semi-stuructured-datatype
by
Toshi Harada
Jpug study-jsonb-datatype-20141011
by
Toshi Harada
Kof2016 postgresql-9.6
by
Toshi Harada
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
第51回NDS PostgreSQLのデータ型 #nds51
by
civicpg
[B22] PostgresPlus Advanced Server の Oracle Database 互換機能検証 by Noriyoshi Shinoda
by
Insight Technology, Inc.
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
by
Insight Technology, Inc.
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
by
NTT DATA Technology & Innovation
Chugokudb18_1
by
Kosuke Kida
JSONB型でpostgresをNoSQLっぽく使う
by
Yuki Takeichi
More from Toshi Harada
PDF
無駄にNeo4jを使っている日々
by
Toshi Harada
PDF
Pgunconf16 toast
by
Toshi Harada
PDF
Pgunconf14 pg13-psql
by
Toshi Harada
PDF
20190518 27th-chugoku db-lt-pg12
by
Toshi Harada
PDF
20190202-pgunconf-Access-Privilege-Inquiry-Functions
by
Toshi Harada
PDF
20181122 pg con-jp-lt-logrep
by
Toshi Harada
PDF
20171106 ntt-tx-postgre sql-10
by
Toshi Harada
PDF
20171028 osc-nagaoka-postgre sql-10
by
Toshi Harada
PDF
20170819 ocd-l tthon-pgdev
by
Toshi Harada
PDF
Ntt tx-study-postgre sql-10
by
Toshi Harada
PDF
Jpug study-postgre sql-10-pub
by
Toshi Harada
PDF
Chugoku db 20th-postgresql-10-pub
by
Toshi Harada
PDF
Pgconf asia-201612203-pg reversi-ja
by
Toshi Harada
PDF
Pgconf asia-201612203-pg reversi
by
Toshi Harada
PDF
Chugoku db 17th-lt-kly
by
Toshi Harada
PDF
Chugoku db 17th-postgresql-9.6
by
Toshi Harada
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
by
Toshi Harada
PDF
Dblt#2 do-postgres-dream-of-graph-database
by
Toshi Harada
PDF
Do postgres-dream-of-graph-database
by
Toshi Harada
PDF
Hackers Champloo 2016 postgresql-9.6
by
Toshi Harada
無駄にNeo4jを使っている日々
by
Toshi Harada
Pgunconf16 toast
by
Toshi Harada
Pgunconf14 pg13-psql
by
Toshi Harada
20190518 27th-chugoku db-lt-pg12
by
Toshi Harada
20190202-pgunconf-Access-Privilege-Inquiry-Functions
by
Toshi Harada
20181122 pg con-jp-lt-logrep
by
Toshi Harada
20171106 ntt-tx-postgre sql-10
by
Toshi Harada
20171028 osc-nagaoka-postgre sql-10
by
Toshi Harada
20170819 ocd-l tthon-pgdev
by
Toshi Harada
Ntt tx-study-postgre sql-10
by
Toshi Harada
Jpug study-postgre sql-10-pub
by
Toshi Harada
Chugoku db 20th-postgresql-10-pub
by
Toshi Harada
Pgconf asia-201612203-pg reversi-ja
by
Toshi Harada
Pgconf asia-201612203-pg reversi
by
Toshi Harada
Chugoku db 17th-lt-kly
by
Toshi Harada
Chugoku db 17th-postgresql-9.6
by
Toshi Harada
Osc shimane-2016-do-postgres-dream-of-graph-database
by
Toshi Harada
Dblt#2 do-postgres-dream-of-graph-database
by
Toshi Harada
Do postgres-dream-of-graph-database
by
Toshi Harada
Hackers Champloo 2016 postgresql-9.6
by
Toshi Harada
Postgresql advent calender 2014 using jsonb by ecpg
1.
PostgreSQL Advent Calener
2o14 埋め込みSQL から JSONB を扱う ぬこ@横浜(@nuko_yokohama)
2.
みなさん、こんにちは このスライドは PostgreSQL
Advent Calender 2014 7 日目のエントリ用のスライドです。
3.
先日(12/5) 開催された PostgreSQLカンファレンスで
JSONB 型について発表しましたが、 (スライドはこちら) その発表から削った小ネタを Advent Calender に転用しますw
4.
ということで今日は 埋め込みSQL で
JSONB を使うという 相変わらずの誰得なネタ でいきます。
5.
ところで、皆さん 埋め込みSQL って
使ってますか?
6.
というか 埋め込みSQL って
なんぞ?
7.
埋め込みSQL (Embedded SQL)
手続き型言語にSQL を埋め込んで データベースアクセスを可能にする手法 (http://ja.wikipedia.org/wiki/%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BFSQL)
8.
C 言語の埋め込みSQL 例
( TRUNCATE TABLE の実行) [nuko@localhost ecpg]$ cat sample.pgc #include <stdio.h> #include <stdlib.h> int main (void) { EXEC SQL CONNECT TO test USER nuko; /* TRUNCATE TABLE sample */ EXEC SQL BEGIN TRANSACTION; EXEC SQL TRUNCATE test; EXEC SQL COMMIT; EXEC SQL DISCONNECT; return (0); } [nuko@localhost ecpg]$ "EXEC SQL“ で 始まる行は埋め込みSQL として SQL そのものを記述できる
9.
当たり前だけど、このファイル をC コンパイラにかけても
エラーになってしまう。
10.
なので、埋め込みSQL は コンパイラにかける前に
「プリコンパイラ」にかけて 埋め込みSQL を 変換する必要がある。
11.
PostgreSQL には、埋め込み SQL
を処理するプリコンパイ ラ「ecpg 」がコア機能として 組み込まれている。 (http://www.postgresql.jp/document/9.3/html/ecpg.html)
12.
埋め込みSQL を組み込んだ C
言語を実行可能にするまでの おおまかな手順
13.
イメージ図 pgcファイル ecpg
Ecpg用 ヘッダファイル cファイル cヘッダファイル Cコンパイラ (gccなど) 実行形式 ファイル ecpg ライブラリ
14.
ということで、 埋め込みSQL の
簡単な実例を見てみる。
15.
先ほどの sample.pgc を
ecpg にかけると sample.c ファイルが 生成される $ ls sample* sample.pgc $ ecpg sample.pgc $ ls sample* sample.c sample.pgc $
16.
生成された” .c” ファイルを
覗いてみる
17.
こんな感じのC コードに展開$ cat
sample.c /* Processed by ecpg (4.10.0) */ /* These include files are added by the preprocessor */ #include <ecpglib.h> #include <ecpgerrno.h> #include <sqlca.h> /* End of automatic include section */ #line 1 "sample.pgc" #include <stdio.h> #include <stdlib.h> int main (void) { { ECPGconnect(__LINE__, 0, "test" , "nuko" , NULL , NULL, 0); } #line 7 "sample.pgc" /* TRUNCATE TABLE sample */ { ECPGtrans(__LINE__, NULL, "begin transaction");} #line 10 "sample.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "truncate test", ECPGt_EOIT, ECPGt_EORT);} #line 11 "sample.pgc" (中略) return (0); }
18.
生成されたC ソースを 直接変更する必要性はない。
こんなC ソースが 裏で生成されてることを 知っておくくらいでOK
19.
で、生成されたC ソースを C
コンパイラにかける。 ecpg ヘッダファイル格納先を-I で指定 ecpg ライブラリ(libecpg) をリンク時に指定 $ cc -o sample -I${HOME}/pgsql/include -L${HOME}/pgsql/lib -lecpg sample.c $ これで完成!
20.
で、埋め込みSQL の メリットって何なの?
21.
PostgreSQL 文書を見ると 一応、以下のメリットが
あるらしい。
22.
その1 SQL 標準である。
へぇー(棒)
23.
埋め込みSQL の概念は かなり古くからSQL
標準とし て取り込まれている。 SQL86, SQL89, SQL92 など
24.
PostgreSQL でも 埋め込みSQL
対応は かなり古く(6.3) から 取り込まれている。
25.
PostgreSQL における 埋め込みSQL
の扱い( 適当) 西暦PostgreSQL バージョン PostgreSQL での対応 世界の動き 1998 年6.3 ecpg の初リリースアントニオ猪木がドン・フ ライと引退試合 2000 年7.0 メモリリーク対応PlayStation2 発売 2002 年7.2 EXECUTE 文対応 配列対応の改善 Xbox 日本国内で発売 2003 年7.4 ecpg とecpglib のスレッ ドセーフ化 新幹線100 系が運行終了 2005 年8.0 SET DESCRIPTOR 対応愛知万博 8.1 x16進数エスケープのサ ポート
26.
PostgreSQL における 埋め込みSQL
の扱い( 適当) 西暦PostgreSQL バージョン PostgreSQL での対応 世界の動き 2006年8.2 SHOWコマンド対応 リグレッション試験対応 冥王星が惑星から除外 2008年8.3 V3 Frontend/backend protocolの採用 0系新幹線運用終了 2009年8.4 ecpgパーサがサーバパー サから自動生成 1兆ジンバブエ・ドルの発行 2010年9.0 SQLDAサポートはやぶさ、地球に帰還 2011年9.1 WHERE CURRENT OF 句 の改善 おせち事件 2014年9.4 Cスタイルコメントのネスト対 応(?) WindowsXPおわた ※ 要は最近も開発継続中ということ。
27.
SQL 標準ってことは 他DBMS
でも 使われているってこと?
28.
SQL 標準における 埋め込みSQL
の扱い SQL標準対応言語 SQL86 COBOL FORTRAN PL/I SQL89 C 結構昔から存在している規格
29.
他DBMS での対応 DBMS
COBOL C C++ FORTRAN Pascal Oracle ○ ○ ○ ○ ○ PostgreSQL ○ △ DB2 ○ SQLServer ○ (以前) Informix ○ Oracle はマメにサポートしてるなあ。 PostgreSQL のC++ 対応は不完全
30.
Oracle もPostgreSQL も
C 言語の埋め込みSQL を サポートしている!
31.
つまり、Oracle のPro*C で
作ったアプリケーションは PostgreSQL ecpg への移植が容易? _ __ /´=: ミ´二. ヾ\ / ' / '´r ー= 、ヽ. ヽ 、ヽ i / 〃, イ| | |_L| l l 埋め込みSQLは誰でもウェルカム |.l.l ル'__ リヽ ヘl_N ヽ!.l | PostgreSQLでもOracleでもお好きなものを | |. バ ̄o` ´o ̄,"|l | どうぞお気になさらず . レ1  ̄ 〈|:  ̄ !`| ご自由にお楽しみください ド」 、ー-----‐ ァ ,l イ! _,,... -‐| l ト、` ¨二¨´ ,. イ.l l ー- ...._ , ィ''"´:::::::::::::::| l.l :::: ヽ、__, .::´ :l.l |::::::::::::::::: ` ¨l ヽ r'つ . /:::|:::::::::::::::::::::::W \ ::::::::::: /l ル:::::::::::::::::::::::|::: ヽ / ∟、-‐''つ /:::::: |::::::::::::::::::::::::l. \ / .l::::::::::::::::::::::::|:::::: ヽ ,.< )ヽヾニニ⊃ . /:::::::::::|:::::::::::::::::::::::::l /\ .l::::::::::::::::::::::::|:::::::::: ヽ /\\ i l ニ二⊇ /:::::::::::::::|:::::::::::::::::::::::::l/\_/\.!::::::::::::::::::::::::|:::::::::::::: ヽ /::::::::::::\. ゝ-─'ー-- ' :::::::::::::::::::|::::::::::::::::::::::::: l ハ /:::::::::::::::::::::::::|:::::::::::::::::: \ /::::::::::::::::::::/ :::::::::::::::::: l:::::::::::::::::::::::::::! ./ ヽ ./::::::::::::::::::::::::::|::::::::::::::::::::/::::::::::::::::::::/ ヽ::::::::::::::; イ:::::::::::::::::::::::::::V V:::::::::::::::::::::::::::: ト、:::::::::::::/::::::::::::::::::::::/ :::::::::::::::/ |:::::::::::::::::::::::::::: ヽ ./::::::::::::::::::::::::::::::| ヽ::::::::::::::::::::::::::::/ ::::::::::::/ | :::::::::::::::::::::::::::::∨::::::::::::::::::::::::::::::::| ヽ::::::::::::::::::/ _:/ |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| \_:/
32.
そんなに甘くはない。
, -‐; z ..__ _丿 / ゙̄ヽ′ ニ‐ - 、\ \ ところがどっこい Z ´// , ヘ.∧ ヽ \ヽ ゝ ヽ ‥‥‥‥ /, / , リ v ヘ lヽ\ヽヽ.| ノ 夢じゃありません / イル_- 、ij~ ハにヽ,,\`| < ‥‥‥‥! . N⌒ヽヽ // ̄リ:| l l | ` ) ト、_e. 〉u ' e _ ノノ |.l l | ∠. 現実です | 、< 、 ij _,¨ 、イ|| ト、| ヽ ‥‥‥! . | ドエエエ「-┴''´|.|L八 ノ - 、 これが現実‥! l. ヒ_ー-r-ー'スソ | l トゝ、.__ | ,. - 、 _,,. -‐ ''" トヽエエエエ! ゝ'´. イ i l;;;;:::::::::::`:: ー/ ハ:::::::::::::::::::::| l\ー一_v~'´ j ,1;;;;;;::::::::::::::::::: . /:::;l::::::::::::::::::::;W1;;;下、 /l ル' !;;;;;;;;;:::::::::::::::: /:::::;;; l :::::::::::::::::;;;;;;;;;;;;;;;|: : X : : : : : |;;;;;;;;;;;;;;:::::::::::: /:::::;;;;;;|:::::::::::::::;;;;;;;;;;;;;;;;|/: : > 、: : :|;;;;;;;;;;;;;;;::::::::::: Oracle 独自拡張多すぎぃ! (動的SQL の扱いなど)
33.
【閑話休題 昔話】 そういえば某社の入社直後に プリコンパイラの概念も知らず
ホスト言語のCOBOL も知らず 移植元のPL/I ベースの言語も 知らないままに、 C 言語でプリコンパイラ作成の一部を やらされたのは良い思い出
34.
その2 プリコンパイル時に SQL
の構文チェックを してくれる。
35.
プリコンパイル時の構文チェックの例 $ cat
sample.pgc #include <stdio.h> #include <stdlib.h> int main (void) { EXEC SQL CONNECT TO test USER nuko; /* TRUNCATE TABLE sample */ EXEC SQL BEGIN TRANSACTION; EXEC SQL TRANCATE test; EXEC SQL COMMIT; EXEC SQL DISCONNECT; return (0); } TRUNCATE 文の スペルミス プリコンパイル時に エラーチェックしてくれる $ ecpg sample.pgc sample.pgc:11: ERROR: unrecognized data type name "TRANCATE" $
36.
存在しないテーブル等の プリコンパイル時の チェックはできない。
また動的なSQL を使う場合も プリコンパイル時の チェックはできない。
37.
その3 ホスト変数による プログラム言語への
情報の授受が簡単?
38.
ということで、ここから ホスト変数を使って JSONB
型の挿入と 検索を行なう例を説明します。 やっと本題ですw
39.
というか ホスト変数って 何よ?
40.
ホスト変数とは、 C プログラムと
SQL 文との間で データをやり取りするための 変数のこと。 DECLARE SECTION で記述
41.
JSONB アクセス用のホスト変数 ecpg
でJSONB を扱う場合はVARCHAR を使うことになる。 int main (void) { EXEC SQL BEGIN DECLARE SECTION; // Host variable VARCHAR insert_data[1024]; VARCHAR id[16]; VARCHAR name[128]; VARCHAR age[16]; // null indicator int age_ind; EXEC SQL END DECLARE SECTION; int i; 可変長テキストの場合は VARCHAR という 特殊な記法で宣言する 識別子用変数(後述) これはホスト変数じゃない
42.
ホスト変数を使ってJSONB をINSERT char*
values[3] = { "{"id":1, "name": {"first": "Oleg"}, "distribute": ["GIN", "hstore", "json", "jsonb"]}", "{"id":2, "age": 59, "name": {"last": "Lane", "first": "Tom"}}", "{"id":3, "name": {"nickname": "nuko"}, "distribute": ["ksj", "neo4jfdw"]}" }; (中略) VARCHAR insert_data[1024]; (中略) for (i=0; i<=2; i++) { insert_data.len = strlen(values[i]); strcpy(insert_data.arr, values[i]); EXEC SQL INSERT INTO jsonb_t VALUES ( :insert_data ); } 長さ(len) と データ実体(arr) を 事前にセットする SQL 内でホスト変数を 使うときには ”:” を前につける
43.
ホスト変数を使ってJSONB をSELECT (カーソルの細かい説明は割愛。すいません)
/* select jsonb data (use cursor) */ EXEC SQL DECLARE cur CURSOR FOR SELECT data->>'id', data->>'name', data->>'age' FROM jsonb_t; EXEC SQL OPEN cur; while (true) { EXEC SQL FETCH NEXT FROM cur INTO :id, :name, :age:age_ind; if (sqlca.sqlcode > 0) break; if ( age_ind < 0) { // "age" is null printf("id=%s, name=%sn", id.arr, name.arr); } else { // "age" is not null printf("id=%s, name=%s, age=%sn", id.arr, name.arr, age.arr); } } EXEC SQL CLOSE cur; JSONB 演算子を使った SELECT 文でカーソルを定義 FETCH 文内に ホスト変数を記述 指示子はホスト変数の 後ろに記述する 値参照時には arr をつける
44.
/* select jsonb
data (use cursor) */ EXEC SQL DECLARE cur CURSOR FOR SELECT data->>'id', data->>'name', data->>'age' FROM jsonb_t; EXEC SQL OPEN cur; while (true) { EXEC SQL FETCH NEXT FROM cur INTO :id, :name, :age:age_ind; if (sqlca.sqlcode > 0) break; if ( age_ind < 0) { // "age" is null printf("id=%s, name=%sn", id.arr, name.arr); } else { // "age" is not null printf("id=%s, name=%s, age=%sn", id.arr, name.arr, age.arr); } } EXEC SQL CLOSE cur; 指示子について (主にnull の判別のために使う変数) 指示子変数が負の値なら null である指示子はホスト変数の 後ろに記述する
45.
プリコンパイル・コンパイル・実行 $ ecpg
jsonb.pgc $ cc -o jsonb -I${HOME}/pgsql/include -L${HOME}/pgsql/lib -lecpg jsonb.c $ ./jsonb id=1, name={"first": "Oleg"} id=2, name={"last": "Lane", "first": "Tom"}, age=59 id=3, name={"nickname": "nuko"} $ 埋め込みSQL でもJSONB は フツーに使えました!
46.
ということで、レガシーな 埋め込みSQL という
フレームワークでも 最新機能であるJSONB が 使えますよ、という話でした。
47.
ecpg 自体、それなりに メリットがあるかもしれないが
いまどき、あえて 新規アプリケーションを ecpg で組む理由は あまりない気がする・・・が。
48.
でも、そんな機能でも 「SQL 標準である」
「互換性を重視する」 という理由でサポートしてる PostgreSQL は可愛いなあと PostgreSQL is lovely...
49.
おしまい
Download