【问题标题】:ERROR: invalid input syntax for type timestamp: "20-MAR-17 08.30.41.453267 AM"错误:类型时间戳的无效输入语法:“20-MAR-17 08.30.41.453267 AM”
【发布时间】:2019-05-31 02:07:13
【问题描述】:

我正在尝试使用 csv 格式将假脱机数据从 oracle 复制到 PostgreSQL。 我在复制时遇到错误。

错误:类型时间戳的输入语法无效:“20-MAR-17 08.30.41.453267 AM"

我尝试在 Postgres 上的 DMY 中设置日期时间,但没有成功。如果我将数据转换为YMD 格式,我可以输入数据(即我必须更改大量字段和近 50 TB 的数据)

有人可以帮我解决这个问题吗?

badmin=# copy downloaded_file from '/export/home/dbadmin/postgresql/TESTPGDB/scripts/FACTSET_IDS_2_V1.DOWNLOADED_FILE.csv' 
   with delimiter ','; 
ERROR:  invalid input syntax for type timestamp:
"20-MAR-17 08.30.41.453267 AM" CONTEXT:  COPY downloaded_file, line 1,
column DOWNLOAD_TIME: "20-MAR-17 08.30.41.453267 AM"

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    假设您的主表具有以下列和数据类型。

    \d downloaded_file
     Column |            Type
    --------+----------------------------
     id     | integer
     txt    | text
     tstamp | timestamp without time zone
    

    现在,与其直接复制到表中,不如创建一个包含相同列但所有文本数据类型的临时表。

    create temporary  table downloaded_file_tmp ( id text, txt text, tstamp text);
    

    现在,将文件的内容复制到这个临时表中。

    文件如下所示。

    $cat f.csv
    1,'TEXT1','20-MAR-17 08.30.41.453267 AM'
    

    从文件复制到临时表。

    \copy downloaded_file_tmp from 'f.csv' with delimiter ',' CSV;
    

    从临时表复制到主表。

    INSERT INTO downloaded_file 
                (id, 
                 txt, 
                 tstamp) 
    SELECT id :: INT, 
           txt, 
           TO_TIMESTAMP('20-MAR-17 08.30.41.453267 AM', 'dd-mon-yy hh.mi.ss.US AM') 
    FROM   downloaded_file_tmp; 
    

    注意 format specifier US 代表微秒 (000000-999999)

    knayak=# select * from downloaded_file;
     id |   txt   |           tstamp
    ----+---------+----------------------------
      1 | 'TEXT1' | 2017-03-20 08:30:41.453267
    

    【讨论】:

    • 感谢您的响应,我们已经尝试过了,但我们有 8000 个表,基本上我们想停用 oracle 数据库并备份 CSV 文件中的数据,如果需要,我们可以导入到开源数据库中我知道奇怪的要求,但就是这样。它的重复工作太多了,所以只想知道有没有其他方法可以直接导入数据?即使没有对 oracle 列进行类型转换?
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多