2015-04-23 63 views
2

我想执行此查询。Postgres - 通过SQL插入varchar数组

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 

问题是我无法改变的分贝现在(我没有时间),所以我需要吨o构建一个将“完成”作业的查询(尽管此db需要使用DROP DATABSE进行标准化...)

我的代码有什么问题?也许我错过了一些明显的东西,但我疲惫的心灵正在跳过它。

回答

6
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"}' 
); 

请试试这个...

+0

请你也可以添加你改变了什么? – Nilesh

+0

虽然这是正确的,但我鼓励您尝试解释*为什么*和/或添加相关文档链接。 –

1

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

只有使用{...}值需要用双引号“手短”排列标记内:

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

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

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

因为单引号不需要被转义。

+0

首先是实际上是不同的,单引号形成阵列成员的实际价值的一部分。比较'SELECT'{''lorem ipsum'',''dolor sit'''''text'];'用'SELECT'{“lorem ipsum”,“dolor sit'}':: text [或'SELECT'{lorem ipsum,dolor sit}':: text [];'。数组文字使用*双引号*表示内部值,而这些引号是可选的。它更像CSV而不是SQL。是的,那太可怕了。 –

+0

@CraigRinger:当然,我在想什么。更正 –

+0

我不是故意跟随你并挑剔的方式。试图帮助。我刚刚意识到它最近似乎有点这样;-) –