我创建了一个新的Postgresql表,但无法将.txt文件加载到该表中。我将标题从文本文件中剥离,并尝试加载数据,但出现此错误:
错误:最后一个预期的列之后有多余的数据。上下文:COPYcrd_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));
任何帮助将不胜感激!
欢迎使用堆栈溢出。
如果您的列按选项卡分隔,请尝试以下操作:
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)