我已经尝试了几个小时,从一个csv文件填充postgres12数据库使用 COPY
命令。这张table有一张table hstore
字段和其中一个键值对具有双引号 "
在价值观上。
postgres数据库是这样创建的
CREATE TABLE test (
title VARCHAR(20),
tags hstore
);
csv文件使用 tabs
作为分隔符,如下所示
My Title | name=>"""Paul "Butch" Newman""", job=>actor
name值需要双引号和转义,因为它包含空格。 |
表示一个制表符。
我的导入语句如下所示:
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返回 Paul Butch Newman
而不是 Paul "Butch" Newman
我的问题是如何将双引号转换成实际的hstore值?
我发现了许多关于导入文本字段的双引号的答案。但这里的输入是一个 hstore
字段和值需要在此处双引号,因为它包含空格。
谢谢!
1条答案
按热度按时间fquxozlt1#
我只是在本地玩的。
我假设您可以控制输入文件的格式。
问题是csv格式转换为
""
在用双引号括起来的元素中找到"
当你把它们传出去的时候。这让我得到了你想要的结果:
一旦csv处理程序通过将双引号转换为单引号完成转义,它就会通过
name=>"Paul \"Butch\" Newman", job=>actor
到insert
,这是如何在psql或pgadmin中将其作为文本编写的。出于好奇,我选择将其作为文本而不是csv导入,并且输入记录必须包含
name=>"Paul \\"Butch\\" Newman", job=>actor
工作正常。