Форматирование даты/времени для создания таблицы

Я создаю таблицу, которая будет заполнена COPY. Вот формат этих данных:

6/30/2014  2:33:00 PM
MM-DD-YYYY HH:MM:SS ??

Что бы я использовал в качестве форматирования для оператора CREATE TABLE?

CREATE TABLE practice (
Data_Time ????
)

Одним из вариантов может быть чтение как varchar(), а затем форматирование позже. Кажется запутанным.


person Pat Stroh    schedule 06.03.2015    source источник


Ответы (2)


Всегда хранить метки времени как timestamp (или timestamptz).
Никогда не используйте для этого строковые типы (text, varchar, ...).

CREATE TABLE practice (
  practice_id serial PRIMARY KEY
, data_time timestamp NOT NULL
);

Если ваши литералы меток времени чистые и соответствуют стандартному формату MDY, вы можете установить DateStyle временно, чтобы транзакция могла напрямую читать правильные timestamp типы:

BEGIN;
SET LOCAL datestyle = 'SQL, MDY';  -- works for your example
COPY practice (data_time) FROM '/path/to/file.csv';
COMMIT;

В противном случае ваша идея не так уж и плоха: COPY во временную таблицу с text столбцом, очистить оттуда данные и INSERT метки времени, возможно, с помощью to_timestamp(). Пример:

person Erwin Brandstetter    schedule 07.03.2015

Вы никогда не должны использовать vharchar() в postgres. Всегда используйте текст. Но мне кажется, что вы хотите 2 столбца

create table practice (date_time timestamp, format text)
person Falmarri    schedule 06.03.2015
comment
Нет никакой разницы между текстом и varchar (без ограничения!), так зачем беспокоиться? - person Frank Heikens; 07.03.2015