PostgreSQL 8.2と8.3の間のTO__DATE関数
PostgreSQL 8.3がデータ型を非常に強力にチェックしていることは、PostgreSQL8.xからPostgreSQL8.3への移行後に多くのデータ型エラーが発生することを意味します。ほとんどの場合、データ型のチェックが原因です。
一般的なエラーの1つは、to__date()関数です。パラメータとして2つのテキストを受け入れます。
to__date(text,text)
今、私は次のようにテーブルを作成します。単純なテーブル呼び出しn
url
testには、作成日がタイムスタンプデータ型として含まれています。
CREATE TABLE n__url__test ( urltestid bigserial NOT NULL, createddate timestamp without time zone DEFAULT now(), CONSTRAINT n__url__to__test__pkey PRIMARY KEY (urltestid) )
PostgreSQL8.2でSQLを実行すると、期待通りの結果が ‘YYYY-MM-DD’形式で返されます。
--PostgreSQL 8.2 --------------- select to__date(createddate,'YYYY-MM-DD') from n__url__test;
しかし、私はPostgreSQL8.3に移行した後、私は次のエラーを打つ
--PostgreSQL 8.3 --------------- select to__date(createddate,'YYYY-MM-DD') from n__url__test; -------------------------------------------------------------------------------- エラー:関数to__date(タイムゾーンなしのタイムスタンプ、不明)は存在しませんLINE 1:to__date(createddate、 'YYYY-MM-DD')をn__url__testから選択してください^ヒント:指定された名前と引数の型に一致する関数はありません。明示的な型キャストを追加する必要があるかもしれません。 ** ** ** ** ** ** ** ** ** ** Error ** ** ** ** ** ** ** ** ** **
PostgreSQL 8.3は、以前のバージョンのようにタイムスタンプからテキストに自動的に変換されません。明示的な型キャストを作成する必要があります
--PostgreSQL 8.3 --------------- select to__date(createddate::text,'YYYY-MM-DD') from n__url__test;
- createddateに**
-
text ** を追加すると、明示的にデータ型をテキストに変換します。 PostgreSQL8.3は厳密にデータ型をチェックするのは良い機能ですが、以前のバージョンを使用している人がたくさんいることを忘れないでください。アプリケーションが上記のようなデータ型チェックを無視して設計することは、多くの問題を引き起こします。