将 .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)
我创建了一个新的 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)