Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres复制到hstore字段中,值中带有双引号_Sql_Postgresql_Escaping_Postgis_Hstore - Fatal编程技术网

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文本替换引号,但我还没有尝试过。