SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
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 も出てないけど)
おしまい

Mais conteúdo relacionado

Semelhante a 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グランプリ
 

Mais de Toshi Harada

Mais de 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
 

Último

Último (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

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 も出てないけど)