Оказывается, вы можете:
SET DATESTYLE = 'YMD';
перед SELECT
ing из таблицы. Однако это повлияет на интерпретацию всех дат, а не только дат из файла. Если вы постоянно используете однозначные даты ISO в другом месте, это будет хорошо, но это может быть проблемой, если (например) вам нужно также принимать литералы даты «D/M/Y» в том же запросе.
Это характерно для CREATE EXTERNAL TABLE
GreenPlum и не применяется к стандартным SQL-оболочкам SQL/MED
внешних данных, как показано ниже.
Что меня удивляет, так это то, что собственно PostgreSQL (в котором нет этой функции CREATE EXTERNAL TABLE
) всегда принимает даты YYYY-MM-DD
и YYYYMMDD
в стиле ISO, независимо от DATESTYLE
. Наблюдать:
regress=> SELECT '20121229'::date, '2012-12-29'::date, current_setting('DateStyle');
date | date | current_setting
------------+------------+-----------------
2012-12-29 | 2012-12-29 | ISO, MDY
(1 row)
regress=> SET DateStyle = 'DMY';
SET
regress=> SELECT '20121229'::date, '2012-12-29'::date, current_setting('DateStyle');
date | date | current_setting
------------+------------+-----------------
2012-12-29 | 2012-12-29 | ISO, DMY
(1 row)
... поэтому, если GreenPlum ведет себя так же, вам не нужно ничего делать, чтобы эти YYYYMMDD
дат правильно читались из входного файла.
Вот как это работает с file_fdw
SQL/MED
внешней обёрткой данных PostgreSQL:
CREATE EXTENSION file_fdw;
COPY (SELECT '20121229', '2012-12-29') TO '/tmp/dates.csv' CSV;
SET DateStyle = 'DMY';
CREATE SERVER csvtest FOREIGN DATA WRAPPER file_fdw;
CREATE FOREIGN TABLE csvtest (
date1 date,
date2 date
) SERVER csvtest OPTIONS ( filename '/tmp/dates.csv', format 'csv' );
SELECT * FROM csvtest ;
date1 | date2
------------+------------
2012-12-29 | 2012-12-29
(1 row)
Содержимое файла CSV:
20121229,2012-12-29
поэтому вы можете видеть, что Pg всегда будет принимать даты ISO для CSV, независимо от стиля даты.
Если GreenPlum этого не делает, отправьте сообщение об ошибке. Идея DateStyle
изменить способ чтения внешней таблицы после ее создания безумна.
person
Craig Ringer
schedule
07.11.2012
SET DATESTYLE = 'YMD';
перед загрузкой CSV сCOPY
, но я не уверен насчет внешних таблиц. Хорошая точка зрения. Сохраняется ли действиеDATESTYLE
во время создания внешней таблицы? Что произойдет, если вы измените его после создания внешней таблицы? - person Craig Ringer   schedule 06.11.2012file_fdw
внешнюю оболочку данных (postgresql.org/docs /current/static/file-fdw.html), так как нетCREATE EXTERNAL TABLE
. - person Craig Ringer   schedule 07.11.2012