Sql Postgres复制到hstore字段中,值中带有双引号
几个小时以来,我一直在尝试使用Sql Postgres复制到hstore字段中,值中带有双引号,sql,postgresql,escaping,postgis,hstore,Sql,Postgresql,Escaping,Postgis,Hstore,几个小时以来,我一直在尝试使用COPY命令从CSV文件填充Postgres 12数据库。该表有一个hstore字段,其中一个键值对的值中有一个双引号“ Postgres数据库是这样创建的 CREATE TABLE test ( title VARCHAR(20), tags hstore ); My Title | name=>"""Paul "Butch" Newman""", job=&
COPY
命令从CSV文件填充Postgres 12数据库。该表有一个hstore
字段,其中一个键值对的值中有一个双引号“
Postgres数据库是这样创建的
CREATE TABLE test (
title VARCHAR(20),
tags hstore
);
My Title | name=>"""Paul "Butch" Newman""", job=>actor
CSV文件使用选项卡作为分隔符,如下所示
CREATE TABLE test (
title VARCHAR(20),
tags hstore
);
My Title | name=>"""Paul "Butch" Newman""", job=>actor
名称值需要双引号并转义,因为它包含空格
|
表示一个制表符
我的导入语句如下所示:
COPY test (title, tags)
FROM '/var/lib/postgresql/data/test.csv'
DELIMITER E'\t' CSV ENCODING 'UTF8';
数据库按预期填充,但当我使用
从测试中选择标签->'name'作为名称;
pgAdmin 4返回
Paul Butch Newman
而不是
Paul“Butch”Newman
我的问题是如何将双引号转换为实际的hstore值?
我找到了很多关于导入文本字段的双引号的答案。但是这里的导入是导入到hstore
字段中,并且该值需要在这里双引号,因为它包含空格
谢谢!我刚在本地玩过这个
我假设您可以控制输入文件的格式
问题在于,CSV格式将双引号中的元素中的“
转换为向上传递时的”
这让我得到了你想要的结果:
My Title | name=>"""Paul \""Butch\"" Newman""", job=>actor
一旦CSV处理程序通过将双引号转换为单引号来完成其转义,它就会将name=>“Paul\”Butch\“Newman”,job=>actor
传递到insert
,这就是在psql或PgAdmin中将其作为文本编写的方式
select tags->'name' as name
from test_hstor;
name
---------------------
Paul "Butch" Newman
(1 row)
出于好奇,我选择将其作为文本而不是csv导入,输入记录必须包含name=>“Paul\\\”Butch\\“Newman”,job=>actor
才能正常工作。太好了,太好了。非常感谢。刚刚出现的另一个想法是用unicode文本替换引号,但我还没有尝试过。