PostgreSQL9.6からPostgreSQL12.xバージョンアップに伴う仕様変更
9.6→10.x
RDS(PostgreSQL)が強制的にバージョンアップされるようで、関数の仕様変更など影響を調査しましたのでまとめました。
to_dateが厳密になりました。2020年3月32日なら2020年4月1日と返ってきていましたが、10.x以降エラーとなります。
PostgreSQL9.6 〇 select to_date('2017-02-29','YYYY-MM-DD') ---- 2017/03/01 PostgreSQL10.x × select to_date('2017-02-29','YYYY-MM-DD') エラー
to_timestampが厳密になりました。2020年3月31日25時なら2020年4月1日1時と返ってきていましたが、10.x以降エラーとなります。
PostgreSQL9.6 〇 select to_timestamp('2000-02/27 24:15:00','YYYY/MM/DD HH24:MI:SS') ---- 2000/02/28 0:15:00 PostgreSQL10.x × select to_timestamp('2000-02/27 24:15:00','YYYY/MM/DD HH24:MI:SS') エラー
make_dateがマイナス年を許容するようになりました。許容するようになったので、バージョンアップに影響はないと思われます。
PostgreSQL9.6 〇 select make_date × select make_date ---- PostgreSQL10.x 〇 select make_date ---- 〇 select make_date ----
coalesce,case内で集合関数が使えなくなりました。
PostgreSQL9.6 〇 select case when true then generate_series(1,2) else null end ---- 1 2 PostgreSQL10.x × select case when true then generate_series(1,2) else null end
10.x→11.x
to_number()がテンプレート区切りが一致しないときに文字を消費するのが防止されました。
PostgreSQL10.x SELECT to_number('1234', '9,999') ---- 134 PostgreSQL11.x SELECT to_number('1234', '9,999') ---- 1234
to_date()、to_number()およびto_timestamp()を、各テンプレート文字に対する1文字を読み飛ばすように修正されました。
PostgreSQL10.x SELECT to_number('$12.34', '\99D99') ---- 0.34 PostgreSQL11.x SELECT to_number('$12.34', '\99D99') ---- 12.34
to_char()、to_number()およびto_timestamp()のテンプレート文字列で、ダブルクォート内のバックスラッシュの扱いが調整されました。
PostgreSQL10.x SELECT to_char(100, 'h"oge\\"999') ---- hoge\"999 PostgreSQL11.x SELECT to_char(100, 'h"oge\\"999') ---- hoge\ 100
11.x→12.x
random()、setseed()関数がプラットフォームによらず統一した動作をするようになりました。
substring(.. from … for ..)関数が標準に従ったマッチングの欲張り動作をするように変更されました。
substring(文字列,数値,数値)の場合は影響ありません。正規表現を使用している場合のみマッチングの動作が変わるようです。
参考サイト
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント