Postgres COPY 到带有双引号的 hstore 字段
Postgres COPY into hstore field with double quote in value
几个小时以来,我一直在尝试使用 COPY
命令从 CSV 文件填充 Postgres 12 数据库。有问题的 table 有一个 hstore
字段,其中一个键值对在值中有一个双引号 "
。
Postgres 数据库是这样创建的
CREATE TABLE test (
title VARCHAR(20),
tags hstore
);
CSV 文件使用 tabs
作为分隔符,看起来像这样
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';
数据库按预期填充,但是当我用
查询它时
SELECT tags->'name' as name FROM test;
pgAdmin 4 returns
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
才能正常工作。
几个小时以来,我一直在尝试使用 COPY
命令从 CSV 文件填充 Postgres 12 数据库。有问题的 table 有一个 hstore
字段,其中一个键值对在值中有一个双引号 "
。
Postgres 数据库是这样创建的
CREATE TABLE test (
title VARCHAR(20),
tags hstore
);
CSV 文件使用 tabs
作为分隔符,看起来像这样
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';
数据库按预期填充,但是当我用
查询它时SELECT tags->'name' as name FROM test;
pgAdmin 4 returns
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
才能正常工作。