SlideShare a Scribd company logo
PostgreSQL 9.4 
SELECT 文の 
微妙な強化 
ぬこ@横浜(@nuko_yokohama)
自己紹介 
「ぬこ@横浜」で検索 
ラーメンの食べ歩きと 
無駄なPostgreSQL 拡張を考えるのが趣味 
漢数字型とか、 
neo4j_fdwとか 
ゆるい全文検索拡張とか 
psql上の数当てとか 
PostgreSQL 本 
書きました。 
こっちも ⇒ 
よろしくです。
現在β2 リリース中の 
PostgreSQL 9.4
ロジカルデコーディング 
マテリアライズド・ビュー改善 
JSONB 対応 
ALTER SYSTEM 
等々の改善
それだけでなく、地味~な 
改造が各所に加わっている。 
SELECT 文にもちょっとした 
改造が入っています。
SELECT 文の3 つの改善 
選択リストなしSELECT 
WITH ORDINALITY 
ROWS FROM()
選択リストなしSELECT 
Allow SELECT with an empty target list (Tom Lane) 
This was added so views that select from a table 
with zero columns can be dumped correctly. 
SELECT で空の選択リストを 
許容するというもの。
選択リストなしSELECT 
PostgreSQL 9.3 まで 
test=# SELECT ; 
ERROR: syntax error at or near ";" 
LINE 1: SELECT ; 
^ 
test=# 
ですよねー
選択リストなしSELECT 
PostgreSQL 9.4 から 
test=# SELECT ; 
-- 
(1 row) 
test=# 
ファッ? 
というか誰得なんだこの機能
選択リストなしSELECT 
Allow SELECT with an empty target list (Tom Lane) 
This was added so views that select from a table 
with zero columns can be dumped correctly. 
なんか後の文章を読むと、 
列のないテーブルから 
選択されたビューのダンプを 
正しく行なうために組み込んだ? 
(自分の環境で再現できなかったけど)
選択リストなしSELECT 
【余談その1】 
これ調べてて、列のないテーブルへの 
INSERT が出来ることを初めて知るw 
test=# CREATE TABLE no_col (); 
CREATE TABLE 
test=# INSERT INTO no_col (SELECT FROM generate_series(1,3)); 
INSERT 0 3 
test=# SELECT FROM no_col; 
-- 
(3 rows) 
test=# 
だから何?と言われると困るけどw
選択リストなしSELECT 
【余談その2】 
選択リストなしSELECT が可なら 
列なしビューはどうなの? 
test=# d no_col 
Table "public.no_col" 
Column | Type | Modifiers 
--------+------+----------- 
test=# CREATE VIEW no_col_v AS SELECT * FROM no_col; 
ERROR: view must have at least one column 
test=# 
列なしのビューはダメらしい・・・
WITH ORDINALITY 
Add WITH ORDINALITY syntax to number rows returned from 
FROM-clause functions (Andrew Gierth, David Fetter) 
This is particularly useful for functions like unnest(). 
この機能はFROM 句から 
返される結果に 
連番を付与するというもの
WITH ORDINALITY 
ORDINALITY 指定なし 
test=# SELECT * FROM (SELECT * FROM generate_series(1,100,20) )as 
tmp (data); data 
------ 
1 
21 
41 
61 
81 
(5 rows) 
ORDINALITY 指定あり 
test=# SELECT * FROM (SELECT * FROM generate_series(1,100,20) 
WITH ORDINALITY ) as tmp (data, id); 
data | id 
------+---- 
1 | 1 
21 | 2 
41 | 3 
61 | 4 
81 | 5 
(5 rows)
WITH ORDINALITY 
リリースノートを見ると、 
UNNEST 関数(配列を行に展開する関数)と 
組み合わせるといいんじゃね的なこと書いてある。 
test=# SELECT * FROM unnest(ARRAY[10, 200, 50]); 
unnest 
-------- 
10 
200 
50 
(3 rows) 
test=# SELECT * FROM unnest(ARRAY[10, 200, 50]) WITH ORDINALITY; 
unnest | ordinality 
--------+------------ 
10 | 1 
200 | 2 
50 | 3 
(3 rows)
ROWS FROM() 
Add ROWS FROM() syntax to allow horizontal concatenation of 
set-returning functions in the FROM-clause (Andrew Gierth) 
最初、良くわかんなかったけど 
要するに「横UNION 」を 
実現する機能かな。
ROWS FROM() 
全く関連のないレコードを横に連結させる例。 
ラーメンテーブルは3 行、猫テーブルは4 行 
足りない行の値にはnull がセットされる。 
test=# pset null (null) 
Null display (null) is "(null)". 
test=# SELECT * FROM 
ROWS FROM ( 
dblink('dbname=ramen','SELECT soup, ramen FROM ramen') as (s text, r text), 
dblink('dbname=cat','SELECT kind, description FROM cat') as (k text, d text) 
) x (s, r, k, d) ; 
s | r | k | d 
--------+---------------------+--------------------------+---------- 
醤油 | (醤油,旭川ラーメン) | 三毛猫 | かわいい 
味噌 | (味噌,札幌ラーメン) | アメリカンショートヘアー | かわいい 
塩 | (塩,函館ラーメン) | マンチカン | かわいい 
(null) | (null) | ミックス | かわいい 
(4 rows) 
面白いけど、使いどころが良くわからん。 
generate_series と組み合わせたりするといいのか?
ということで、微妙な? 
SELECT 文の3 つの改善を 
紹介しました。 
で、PostgreSQL 9.4.0 は 
いつリリースなんだろう。 
( まだRC も出てないけど)
おしまい

More Related Content

Similar to Pgunconf pg94-select小ネタ

Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
Toshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
Toshi Harada
 
generate_series関数使い込み
generate_series関数使い込みgenerate_series関数使い込み
generate_series関数使い込み
kawarasho
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
Toshi Harada
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
Shigetaka Yachi
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Satoshi Kitajima
 

Similar to Pgunconf pg94-select小ネタ (8)

Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
generate_series関数使い込み
generate_series関数使い込みgenerate_series関数使い込み
generate_series関数使い込み
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
 

More from Toshi Harada

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
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
 
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
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
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-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
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
 
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
 
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
 

More from Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
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
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
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-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
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
 
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
 
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
 

Recently uploaded

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
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
【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
 
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
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
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
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
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
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / 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
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
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
 

Recently uploaded (14)

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
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
【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
 
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
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
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
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
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
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / 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...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 

Pgunconf pg94-select小ネタ

  • 1. PostgreSQL 9.4 SELECT 文の 微妙な強化 ぬこ@横浜(@nuko_yokohama)
  • 2. 自己紹介 「ぬこ@横浜」で検索 ラーメンの食べ歩きと 無駄なPostgreSQL 拡張を考えるのが趣味 漢数字型とか、 neo4j_fdwとか ゆるい全文検索拡張とか psql上の数当てとか PostgreSQL 本 書きました。 こっちも ⇒ よろしくです。
  • 5. それだけでなく、地味~な 改造が各所に加わっている。 SELECT 文にもちょっとした 改造が入っています。
  • 6. SELECT 文の3 つの改善 選択リストなしSELECT WITH ORDINALITY ROWS FROM()
  • 7. 選択リストなしSELECT Allow SELECT with an empty target list (Tom Lane) This was added so views that select from a table with zero columns can be dumped correctly. SELECT で空の選択リストを 許容するというもの。
  • 8. 選択リストなしSELECT PostgreSQL 9.3 まで test=# SELECT ; ERROR: syntax error at or near ";" LINE 1: SELECT ; ^ test=# ですよねー
  • 9. 選択リストなしSELECT PostgreSQL 9.4 から test=# SELECT ; -- (1 row) test=# ファッ? というか誰得なんだこの機能
  • 10. 選択リストなしSELECT Allow SELECT with an empty target list (Tom Lane) This was added so views that select from a table with zero columns can be dumped correctly. なんか後の文章を読むと、 列のないテーブルから 選択されたビューのダンプを 正しく行なうために組み込んだ? (自分の環境で再現できなかったけど)
  • 11. 選択リストなしSELECT 【余談その1】 これ調べてて、列のないテーブルへの INSERT が出来ることを初めて知るw test=# CREATE TABLE no_col (); CREATE TABLE test=# INSERT INTO no_col (SELECT FROM generate_series(1,3)); INSERT 0 3 test=# SELECT FROM no_col; -- (3 rows) test=# だから何?と言われると困るけどw
  • 12. 選択リストなしSELECT 【余談その2】 選択リストなしSELECT が可なら 列なしビューはどうなの? test=# d no_col Table "public.no_col" Column | Type | Modifiers --------+------+----------- test=# CREATE VIEW no_col_v AS SELECT * FROM no_col; ERROR: view must have at least one column test=# 列なしのビューはダメらしい・・・
  • 13. WITH ORDINALITY Add WITH ORDINALITY syntax to number rows returned from FROM-clause functions (Andrew Gierth, David Fetter) This is particularly useful for functions like unnest(). この機能はFROM 句から 返される結果に 連番を付与するというもの
  • 14. WITH ORDINALITY ORDINALITY 指定なし test=# SELECT * FROM (SELECT * FROM generate_series(1,100,20) )as tmp (data); data ------ 1 21 41 61 81 (5 rows) ORDINALITY 指定あり test=# SELECT * FROM (SELECT * FROM generate_series(1,100,20) WITH ORDINALITY ) as tmp (data, id); data | id ------+---- 1 | 1 21 | 2 41 | 3 61 | 4 81 | 5 (5 rows)
  • 15. WITH ORDINALITY リリースノートを見ると、 UNNEST 関数(配列を行に展開する関数)と 組み合わせるといいんじゃね的なこと書いてある。 test=# SELECT * FROM unnest(ARRAY[10, 200, 50]); unnest -------- 10 200 50 (3 rows) test=# SELECT * FROM unnest(ARRAY[10, 200, 50]) WITH ORDINALITY; unnest | ordinality --------+------------ 10 | 1 200 | 2 50 | 3 (3 rows)
  • 16. ROWS FROM() Add ROWS FROM() syntax to allow horizontal concatenation of set-returning functions in the FROM-clause (Andrew Gierth) 最初、良くわかんなかったけど 要するに「横UNION 」を 実現する機能かな。
  • 17. ROWS FROM() 全く関連のないレコードを横に連結させる例。 ラーメンテーブルは3 行、猫テーブルは4 行 足りない行の値にはnull がセットされる。 test=# pset null (null) Null display (null) is "(null)". test=# SELECT * FROM ROWS FROM ( dblink('dbname=ramen','SELECT soup, ramen FROM ramen') as (s text, r text), dblink('dbname=cat','SELECT kind, description FROM cat') as (k text, d text) ) x (s, r, k, d) ; s | r | k | d --------+---------------------+--------------------------+---------- 醤油 | (醤油,旭川ラーメン) | 三毛猫 | かわいい 味噌 | (味噌,札幌ラーメン) | アメリカンショートヘアー | かわいい 塩 | (塩,函館ラーメン) | マンチカン | かわいい (null) | (null) | ミックス | かわいい (4 rows) 面白いけど、使いどころが良くわからん。 generate_series と組み合わせたりするといいのか?
  • 18. ということで、微妙な? SELECT 文の3 つの改善を 紹介しました。 で、PostgreSQL 9.4.0 は いつリリースなんだろう。 ( まだRC も出てないけど)