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

时间:2020-01-25 00:28:21

标签: sql postgresql copy load text-files

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

错误:最后一个预期的列之后有多余的数据上下文:COPY crd_codes1,第1行:“ 01 00 000阿拉巴马州1” SQL状态:22P04

我在文本文件中包括了数据快照,以防万一。这是我在数据库中创建的空白表的代码:

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

任何帮助将不胜感激!

enter image description here

1 个答案:

答案 0 :(得分:1)

欢迎堆栈溢出。

如果您的列按制表符分隔,请尝试以下操作:

COPY CRD_codes1 FROM '/home/jones/file.txt' CSV DELIMITER E'\t'
  • E'\t'指出值由TAB分隔

但是,如果没有正确设置分隔符(如屏幕截图所示),则必须在插入表之前清除此数据。以下脚本将数据导入到临时表中,替换多余的制表符并填充目标表。

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)