2015-04-23 62 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

我不是故意跟隨你並挑剔的方式。試圖幫助。我剛剛意識到它最近似乎有點這樣;-) –