将 .txt 文件加载到 Postgres 数据库中

Load .txt file into Postgres Database

我创建了一个新的 Postgresql table,但我无法将 .txt 文件加载到 table。我从文本文件中剥离 headers 并尝试加载数据但出现此错误:

ERROR: extra data after last expected column CONTEXT: COPY crd_codes1, line 1: "01 00 000 Alabama 1" SQL state: 22P04

我在文本文件中包含了数据快照以备不时之需。这是我在数据库中创建的空白 table 的代码:

CREATE TABLE CRD_codes1 
(state char(2), 
 crd char(2), 
 county char(3), 
 crd_name varchar(50), 
 history_flag char(1));

如有任何帮助,我们将不胜感激!

欢迎来到 Stack Overflow。

如果您的列按制表符拆分,试试这个:

COPY CRD_codes1 FROM '/home/jones/file.txt' CSV DELIMITER E'\t'
  • E'\t' 表示值被 TAB 分割

但如果您的分隔符设置不正确,如您的屏幕截图所示,您必须在插入 table 之前清理此数据。以下脚本将数据导入临时 table,替换多余的制表符并填充目标 table.

CREATE TEMPORARY TABLE t (c TEXT);
COPY t FROM '/home/jones/file.txt' CSV ESCAPE E'\t';

WITH j AS (
  SELECT 
    string_to_array(
      regexp_replace(c, '\t+', ',', 'g'),
    ',') AS val 
  FROM t
) INSERT INTO CRD_codes1
SELECT j.val[1],j.val[2],j.val[3],j.val[4],j.val[5] FROM j;

SELECT * FROM CRD_codes1;

 state | crd | county |       crd_name        | history_flag 
-------+-----+--------+-----------------------+--------------
 01    | 10  | 077    | Lauderdale            | 1
 01    | 10  | 888    | D10 Combined Counties | 1
(2 Zeilen)