【问题标题】:Postgres - inserting a varchar array via SQLPostgres - 通过 SQL 插入 varchar 数组
【发布时间】:2015-04-23 11:58:40
【问题描述】:

我想执行这个查询。

INSERT INTO items (title, description,
start_date,
expiration_date,
type,
quantity,
state,
sold,
cover_photo_file_name,
cover_photo_content_type,
cover_photo_file_size,
instructions)
VALUES
(
    'some_test_value',
    'lorem ipsum',
    '2015-01-01 00:00:00',
    '2015-06-10 00:00:00',
    0,
    19,
    0,
    0,
    'RackMultipart20150317-10093-1ny4gmx.gif',
    'image/gif',
    157574,
    {"lorem ipsum\r","dolor sit\r","loremloremipsumipsum 'sitsit' dolor sit"}
    );

我很讨厌

ERROR: syntax error at or near "{"

当我尝试这样做时

ARRAY["Lorem ipsum\r", ...]

我明白了:

ERROR: column "Lorem ipsum" does not exist

问题是我现在无法更改数据库(我没有时间)所以我需要构建一个查询来“完成”这项工作(尽管这个数据库需要使用 DROP DATABSE 进行规范化.. .)

我的代码有什么问题?也许我错过了一些明显的东西,但我疲惫的头脑只是跳过它。

【问题讨论】:

    标签: arrays database postgresql insert pg


    【解决方案1】:
    INSERT INTO items (title, description,
    start_date,
    expiration_date,
    type,
    quantity,
    state,
    sold,
    cover_photo_file_name,
    cover_photo_content_type,
    cover_photo_file_size,
    instructions)
    VALUES
      ('some_test_value',
      'lorem ipsum',
    '2015-01-01 00:00:00',
    '2015-06-10 00:00:00',
    0,
    19,
    0,
    0,
    'RackMultipart20150317-10093-1ny4gmx.gif',
    'image/gif',
    157574,
    '{"lorem ipsum\r","dolor sit\r","loremloremipsumipsum 'sitsit' dolor sit"}'
    );
    

    请试试这个...

    【讨论】:

    • 请你也添加你改变了什么?
    • 虽然这是正确的,但我鼓励您尝试解释为什么和/或添加相关文档链接。
    【解决方案2】:

    字符串文字需要用单引号 ' 括起来,而不是双引号。

    仅在使用{...} 的“速记”数组表示法中,值需要用双引号引起来:

    '{"lorem ipsum", "dolor sit"}'::text[]
    

    在这里使用ARRAY 构造函数更容易:

    ARRAY['Lorem ipsum\r', ...]
    

    因为单引号不需要转义。

    【讨论】:

    • 第一个实际上不同,单引号构成了数组成员实际值的一部分。将SELECT '{''lorem ipsum'', ''dolor sit''}'::text[];SELECT '{"lorem ipsum", "dolor sit"}'::text[];SELECT '{lorem ipsum, dolor sit}'::text[]; 进行比较。数组字面量使用 双引号 表示内部值,这些引号是可选的。它更像 CSV 而不是 SQL。是的,这太可怕了。
    • @CraigRinger:当然,我在想什么。已更正
    • 我不是要跟着你,顺便吹毛求疵。试图提供帮助。我最近才意识到它可能看起来有点那样;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2023-03-26
    • 1970-01-01
    • 2019-02-17
    相关资源
    最近更新 更多