gpt4 book ai didi

postgresql - 将 csv 文件导入 psql 数据库

转载 作者:行者123 更新时间:2023-11-29 12:34:03 27 4
gpt4 key购买 nike

我想将 csv 文件导入到 psql 数据库...

我已经搜索并尝试使用副本,也提到了 https://www.commandprompt.com/ppbook/r23528我使用的语法是:

copy location from 'file.csv' with delimiters '\t' NULL as 'NULL' CSV;

注意:我的 csv 文件由“制表符”分隔。

第一次执行上述命令后,显示:

ERROR:  syntax error at or near ""\t""
LINE 1: ...om 'file.csv' using delimiters "\t" ;

第二次,

ERROR:  syntax error at or near "copy"
LINE 2: copy location from 'file.csv' using d...

编辑后,

我第二次尝试使用 like ,

copy location from 'file.csv' with delimiter E'\t' NULL as 'NULL' CSV;

ERROR: extra data after last expected column
CONTEXT: COPY location, line 1: "AD AD100 Canillo 42.5833 1.6667 6"

我的表描述是

Table "public.location"

Column | Type | Modifiers
-------------+------------------------+-----------
countrycode | character varying(2) |
postalcode | character varying(20) |
place | character varying(100) |
state | character varying(20) |
country | character varying(100) |
country2 | character varying(20) |
community | character varying(100) |
community2 | character varying(20) |
latitude | double precision |
longitude | double precision |
accuracy | integer |

如何解决?

输入:

AD      AD100   Canillo                                                 42.5833 1.6667  6
AD AD200 Encamp 42.5333 1.6333 6
AD AD300 Ordino 42.6 1.55 6
AD AD400 La Massana 42.5667 1.4833 6
AD AD500 Andorra la Vella 42.5 1.5 6
AD AD600 Sant Julià de Lòria 42.4667 1.5 6
AD AD700 Escaldes-Engordany 42.5 1.5667 6
AR 3636 "POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S))" SALTA A -23.4933 -61.9267 3
AR 4123 LAS SALADAS SALTA A -25.7833 -64.5 4
AR 4126 LA MARAVILLA SALTA A -26.0833 -65.263 3
AR 4126 TALA SALTA A -26.1167 -65.2833 4
AR 4126 LA ASUNCION SALTA A -26.0833 -65.263 3
AR 4126 BRETE SALTA A -26.0667 -65.3667 4
AR 4126 EL SUNCHAL SALTA A -26.0833 -65.263 3
AR 4126 CEIBAL SALTA A -26.1 -65.0167 4
AR 4126 BARADERO SALTA A -26.0833 -65.263 3
AR 4126 CANDELARIA SALTA A -26.1 -65.1 4
AR 4126 ALEM SALTA A -26.0833 -65.263 3
AR 4126 EL BRETE SALTA A -26.0667 -65.3667 4
AR 4126 EL CUIBAL SALTA A -26.0833 -65.263 3
AR 4126 EL JARDIN SALTA A -26.0833 -65.3833 4
AR 4126 OVEJERO SALTA A -26.0833 -65.263 3
AR 4126 LOS MOGOTES SALTA A -26.0333 -65.2 4
AR 4126 "MIRAFLORES (TALA, DPTO. CANDELARIA)" SALTA A -26.0833 -65.263 3

这是一些用于输入的 eg...

当我在 ms xcel 工作表中打开此文件时,使用分隔符选项卡,它将数据正确地分隔到相关的列中。

带有制表符和空值的输入文件,

AD\tAD100\tCanillo\t\n\t\n\t\n\t\n\t\n\t\n\t42.5833\t1.6667\t6
AD\tAD200\tEncamp\t\n\t\n\t\n\t\n\t\n\t\n\t42.5333\t1.6333\t6
AR\t3636\t"POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S))"\tSALTA\tA\t\n\t\n\t\n\t\n\t-23.4933\t-61.9267\t3

最佳答案

Per documentationCOPY 语句中,它应该是 WITH DELIMITER 而不是 DELIMITERS

此外,COPY 语法已更改,我们鼓励您使用以下内容:

COPY location FROM 'file.csv' WITH (FORMAT csv, DELIMITER '\t',  NULL 'NULL');

编辑:

我已经使用提供的信息来测试 COPY 将如何处理呈现的数据:

CREATE TABLE atest (
countrycode text CHECK (length(countrycode) <= 2),
postalcode text CHECK (length(postalcode) <=20),
place text CHECK (length(place) <= 100),
state text CHECK (length(state) <= 20),
country text CHECK (length(country) <= 100),
country2 text CHECK (length(country2) <= 20),
community text CHECK (length(community) <= 100),
community2 text CHECK (length(community2) <= 20),
latitude double precision,
longitude double precision,
accuracy integer);

我已经使用了上面提到的命令(采用了一点):

COPY atest FROM '/Users/viy/atest2.csv'
WITH (FORMAT csv, DELIMITER E'\t', NULL '\n');

并得到与上述相同的错误。这是预料之中的,因为有太多空白字段。让我们看看 CSV 数据以及它如何匹配表定义(所有 \t 都替换为新行):

AD       countrycode
AD100 postalcode
Canillo place
\n state
\n country
\n country2
\n community
\n community2
\n latitude
42.5833 longitude
1.6667 accuracy
6 <-- this one gives the error!

因此,为了加载数据,您必须检查源数据并删除中间的额外空白字段。另一种方法是调整表的定义以匹配您的源数据。

关于postgresql - 将 csv 文件导入 psql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com