我创建了一个新的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));
任何帮助将不胜感激!
答案 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)