Postgresql 使用新列将CSV导入postgres
我在将csv数据导入postgres数据库时遇到一个问题,通过以下命令在我的数据库“landmarks”上启用了geo data/postgis:Postgresql 使用新列将CSV导入postgres,postgresql,csv,postgis,Postgresql,Csv,Postgis,我在将csv数据导入postgres数据库时遇到一个问题,通过以下命令在我的数据库“landmarks”上启用了geo data/postgis: CREATE EXTENSION postgis; 所以。。。。故事是这样的: 我正在关注这一点 我正在尝试导入带有这些列的csv name conf capital venture latitude longitude 作为数据示例,第一行是: example, 1, 1, 1, 51.51923, -0.12205 除了添
CREATE EXTENSION postgis;
所以。。。。故事是这样的:
我正在关注这一点
我正在尝试导入带有这些列的csv
name conf capital venture latitude longitude
作为数据示例,第一行是:
example, 1, 1, 1, 51.51923, -0.12205
除了添加conf、capital和venture,而不是在他的数据(地址、建造日期、建筑师、地标)中添加列之外,我已经按照教程设置了表格。i、 e:
然后
除此之外,数据与他的基本相同
我已经正确地设置了表,并启用了postgis扩展来处理geom数据
但是,当我尝试导入我的csv时,问题出现了:
landmarks=# \copy landmarks(name,conf,capital,venture,latitude,longitude) FROM '../../../../../var/tmp/map2.csv' DELIMITERS ',' CSV HEADER;
ERROR: column "latitude" of relation "landmarks" does not exist
现在,我注意到当他创建表时,他没有添加纬度或经度列。。。因此,我想知道这是否是问题所在,并尝试创建另一个包含这些列和整数的表,但这只会导致以下错误:
ptmap3=# \copy landmarks(name,conf,capital,venture,latitude,longitude) FROM '../../../../../var/tmp/map2.csv' DELIMITERS ',' CSV HEADER;
ERROR: invalid input syntax for integer: "51.51923"
CONTEXT: COPY landmarks, line 2, column latitude: "51.51923"
所以。。。似乎如果我添加纬度列,它就可以工作了,但是数据失败了?在使用此选项检查csv错误后
od -c map2.csv
…我的csv没有问题(没有隐藏字符或错误)。。。那怎么办
如果有人能帮我导入我的csv到这个数据库,我将非常感激 要将
(纬度、经度)
数据导入数据库的几何体列,需要分两步进行处理
1.将数据导入两个浮动列纬度和经度:
UPDATE landmarks SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
从原始表地标:
CREATE TABLE landmarks
(
gid serial NOT NULL,
name character varying(50),
conf character varying(10),
capital character varying(10),
venture character varying(10),
the_geom geometry,
CONSTRAINT landmarks_pkey PRIMARY KEY (gid),
CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
);
CREATE INDEX landmarks_the_geom_gist
ON landmarks
USING gist
(the_geom );
添加临时两列纬度
和经度
:
ALTER TABLE landmarks ADD COLUMN latitude double precision;
ALTER TABLE landmarks ADD COLUMN longitude double precision;
然后导入数据:
\copy landmarks(name,conf,capital,venture,latitude,longitude) FROM '../../../../../var/tmp/map2.csv' DELIMITERS ',' CSV HEADER;
2.通过从纬度
和经度
创建点几何图形来填充几何图形列:
UPDATE landmarks SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
最后,删除临时列:
ALTER TABLE landmarks DROP COLUMN latitude;
ALTER TABLE landmarks DROP COLUMN longitude;
要将(纬度、经度)
数据导入数据库的geometry列,需要分两步进行处理
1.将数据导入两个浮动列纬度和经度:
UPDATE landmarks SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
从原始表地标:
CREATE TABLE landmarks
(
gid serial NOT NULL,
name character varying(50),
conf character varying(10),
capital character varying(10),
venture character varying(10),
the_geom geometry,
CONSTRAINT landmarks_pkey PRIMARY KEY (gid),
CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
);
CREATE INDEX landmarks_the_geom_gist
ON landmarks
USING gist
(the_geom );
添加临时两列纬度
和经度
:
ALTER TABLE landmarks ADD COLUMN latitude double precision;
ALTER TABLE landmarks ADD COLUMN longitude double precision;
然后导入数据:
\copy landmarks(name,conf,capital,venture,latitude,longitude) FROM '../../../../../var/tmp/map2.csv' DELIMITERS ',' CSV HEADER;
2.通过从纬度
和经度
创建点几何图形来填充几何图形列:
UPDATE landmarks SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
最后,删除临时列:
ALTER TABLE landmarks DROP COLUMN latitude;
ALTER TABLE landmarks DROP COLUMN longitude;
还有另一种方法
谷歌pgfutter
并下载相应版本的可执行文件。适用于windows,但其他版本也可用
确保pgfutter
文件和yourdata.csv
文件位于同一目录中李>
在终端中设置目录并运行以下代码
这也将创建一个新表,因此只需输入一个新的表名
pgfutter.exe --host "localhost" --port "5432" --db "YourDatabaseName" --schema "public" --table "TableName" --user "postgres" --pw "YourPassword" csv YourData.csv
还有另一种方法
谷歌pgfutter
并下载相应版本的可执行文件。适用于windows,但其他版本也可用
确保pgfutter
文件和yourdata.csv
文件位于同一目录中李>
在终端中设置目录并运行以下代码
这也将创建一个新表,因此只需输入一个新的表名
pgfutter.exe --host "localhost" --port "5432" --db "YourDatabaseName" --schema "public" --table "TableName" --user "postgres" --pw "YourPassword" csv YourData.csv
错误:整数的输入语法无效:“51.51923”将字符串值指定给整数列时将发生此错误。请您检查一下纬度和经度的csv文件中的数据是如何在命令行中以od读取的,该值以字符5 1的形式存储。5 1 9 2 3,错误:整数的输入语法无效:“51.51923”将字符串值指定给整数列时将发生此错误。请您检查一下纬度和经度的csv文件中的数据是如何在命令行中以od读取的,该值以字符5 1的形式存储。5 1 9 2 3 ,