簡體   English   中英

使用psql \\ copy導入帶有時間戳列(.dd.mm.yyyy hh.mm.ss)的.csv

[英]Importing .csv with timestamp column (dd.mm.yyyy hh.mm.ss) using psql \copy

我正在嘗試使用psql \\COPY命令(而不是SQL COPY)將數據從.csv文件導入到postgresql 9.2數據庫中。

輸入.csv文件包含一個時間戳為dd.mm.yyyy hh.mm.ss格式的列。

我使用了將數據庫日期樣式設置為DMY。

set datestyle 'ISO,DMY'

不幸的是,當我運行\\COPY命令時:

\COPY gc_test.trace(numpoint,easting,northing,altitude,numsats,pdop,timestamp_mes,duration,ttype,h_error,v_error) 
FROM 'C:\data.csv' WITH DELIMITER ';' CSV HEADER ENCODING 'ISO 8859-1'

我收到此錯誤:

錯誤:日期/時間字段值超出范圍:“16.11.2012 07:10:06”

提示:也許你需要一個不同的“日期風格”設置。

語境:COPY trace,第2行,列timestamp_mes:“16.11.2012 07:10:06”

datestyle有什么問題?

您是否嘗試過設置服務器的日期datestyle設置

SET datestyle = 'ISO,DMY';

您正在使用psql元命令\\copy ,這意味着輸入文件是客戶端的本地文件。 但它仍然是必須強制輸入匹配數據類型的服務器。

更一般地說,不像psql元命令\\copy在服務器上調用COPY並且與它密切相關..我引用關於\\set的手冊

注意:此命令與SQL命令SET無關。

我發現在應用psql命令時很難在同一個會話中應用'SET datestyle'。 更改整個數據庫/服務器上的日期樣式(僅用於導入)也可能會對其他用戶或現有應用程序造成副作用。 所以我通常在加載之前修改文件本身:

#!/bin/bash 
#
# change from dd.mm.yyyy to yyyy-mm-dd inside the file
# note: regex searches for date columns separated by semicolon (;) 
sed -i 's/;\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9][0-9][0-9][0-9]\);/;\3-\2-\1;/g' myfile
# then import file with date column
psql <connect_string> -c "\COPY mytable FROM 'myfile' ...."

您似乎使用的日期樣式是德語。 PostgreSQL支持這種日期風格。 試試這個:

SET datestyle TO German;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM