如何为postgres中的数组更改默认标识符{..}?

问题描述 投票:0回答:2

我有很大的.csv文件,其中包含带有[..]作为标识符的数组。显然,postgres的数组默认为{..}。如何更改它以正确,快速地导入它们?我不应该配置.csv文件。在下面的示例中,我们的数组为genres

示例:

create table title_basics (
    tconst text primary key,
    titleType text not null,
    primaryTitle text not null,
    genres text ARRAY
);


copy title_basics(tconst,titleType,primaryTitle,genres)
from 'C:\....\title_basics.csv' delimiter ',' csv header;

数据集示例:

tconst,titleType,primaryTitle,genres
t0001,movie,Miss Jerry,"[""Action"",""Comedy""]"
sql arrays postgresql csv identifier
2个回答
0
投票

您无法更改数组的默认括号类型,但是可以在输入到达数据库之前对其进行更改。但是,您有责任确保所使用的方法可靠。

例如:

COPY title_basics(tconst, titletype, primarytitle, genres)
FROM PROGRAM $$powershell -Command "(gc C:\....\title_basics.csv) -replace '\[','{' -replace '\]','}'"$$
DELIMITER ',' CSV HEADER;

披露:我是EnterpriseDB(EDB)员工。


0
投票

最佳做法:

  1. 以.csv中的文本形式获取字段
  2. 更新列并替换不需要的内容。
  3. 使用alter table将您的列转换为表格。

下面的示例代码

create table title_basics (
 ...
 genres text
);

copy title_basics(tconst,...,genres)
from 'C:...\title_basics.csv' delimiter ',' csv header;

update title_basics set genres=replace(genres,'"','');
update title_basics set genres=replace(genres,'[','');
update title_basics set genres=replace(genres,']','');
alter table title_basics
    alter genres type text[] using string_to_array(genres,',');
© www.soinside.com 2019 - 2024. All rights reserved.