функция TO__DATE между PostgreSQL 8.2 и 8.3

Функция TO_DATE между PostgreSQL 8.2 и 8.3

Как мы все знаем, PostgreSQL 8.3 обеспечивает очень строгую проверку типов данных, из-за этого многие приложения сталкиваются с ошибками многих типов данных после миграции с PostgreSQL8.x на PostgreSQL8.3. В основном это вызвано проверкой типа данных.

Одна из частых ошибок - функция to_date (). Он принимает два текста в качестве параметров.

to_date(text,text)

Хорошо, теперь я создаю следующую таблицу. Простой вызов таблицы n_url_test содержит createddate как тип данных timestamp.

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)
)

Я запускаю следующий sql в PostgreSQL8.2, он возвращает мой ожидаемый результат в формате «ГГГГ-ММ-ДД».

--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;

--------------------------------------------------------------------------------
ERROR:  function to_date(timestamp without time zone, unknown) does not exist
LINE 1: select  to_date(createddate,'YYYY-MM-DD') from n_url_test
                ^
HINT:  No function matches the given name and argument types.
You might need to add explicit type casts.

********** Error **********

PostgreSQL 8.3 не будет автоматически преобразовывать метку времени в текст, как это было в предыдущей версии. Нам нужно явное приведение типов createddate, как показано ниже

--PostgreSQL 8.3
---------------
select  to_date(createddate::text,'YYYY-MM-DD') from n_url_test;

Добавление::text к createddate явным образом преобразует тип данных в текст, это работа. PostgreSQL8.3 strictly checking on data type is good function , but please do not forget there still have a lot people using previous version. Это вызывает много проблем, если приложение основано на дизайне, игнорируя проверку типов данных, как я упоминал выше.