我正在使用/ copy命令将数据从文件复制到Postgres中的表,但它会引发错误时区“p.m”。不承认。
运行简单的插入查询也会引发相同的错误
insert into incoming_data_redgold_facts_dictionaries (facts_date_added )values('29/12/2015 3:23:43 P.M.')
如何修改Postgres以便它可以接受给定的时间格式?
答案 0 :(得分:0)
“最佳”(=可移植)方式是使用ANSI时间戳文字:
insert into incoming_data_redgold_facts_dictionaries
(facts_date_added )
values
(timestamp '2015-12-29 15:23:43');
Postgres还接受直接格式化为ISO时间戳的字符串,而不需要timestamp
关键字(如SQL标准那样)
insert into incoming_data_redgold_facts_dictionaries
(facts_date_added )
values
('2015-12-29 15:23:43');
如果您确实想保留该格式,请使用to_timestamp()
功能:
insert into incoming_data_redgold_facts_dictionaries
(facts_date_added )
values
(to_timestamp('29/12/2015 3:23:43 P.M.', 'dd/mm/yyyy hh:mi:ss P.M.'));
手册中的更多细节:
答案 1 :(得分:0)
如果列中的数据不符合PG格式,则基本上有两个选项:
\copy
之前解析输入文件以使数据符合要求。如何执行此操作取决于您的文件和可用工具。ALTER COLUMN
具有适当的转换功能。在PG中,第二种选择在这种情况下相当容易。 facts_date_added
列应在varchar
之前为text
或\copy
类型。将数据导入表后,您可以使用适当的数据转换函数更改列类型:
ALTER TABLE incoming_data_redgold_facts_dictionaries
ALTER COLUMN facts_date_added
SET DATA TYPE timestamp USING to_timestamp(facts_date_added, 'DD/MM/YYYY HH:MI:SS P.M.');