PostgreSQL9.6からPostgreSQL12.xバージョンアップに伴う仕様変更

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(文字列,数値,数値)の場合は影響ありません。正規表現を使用している場合のみマッチングの動作が変わるようです。

参考サイト

E.6. リリース10
E.6. リリース11
E.5. リリース12

 

コメント

タイトルとURLをコピーしました