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

How to change default identifier {..} for arrays in postgres?

我有大型 .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""]"

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

例如:

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

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

最佳实践:

  1. 将字段作为 .csv 中的文本
  2. 更新专栏并替换您不需要的内容。
  3. 使用 alter table 将您的列转换为 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,',');