2013-08-29 76 views
1

我有一個字段稱爲標籤的表可以包含任意數量的字符串更新文本[]字段:如何用繩子

       Table "public.page" 
     Column  |   Type   |   Modifiers 
----------------------+--------------------------+---------------------------------- 
tags     | text[]     | not null default ARRAY[]::text[] 

我想添加一個字符串變量場 - 但我似乎無法獲得concat函數爲我工作。我已經試過:

update page set tags=concat('My New String',tags); 
ERROR: function concat(unknown, text[]) does not exist 
LINE 1: update page set tags=concat('My New String',tags) where ... 
          ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

update page set tags=('My New String'||tags); 
ERROR: operator is not unique: unknown || text[] 
LINE 1: update page set tags = ('My New String' || tags) where w... 
                ^
HINT: Could not choose a best candidate operator. You might need to add explicit type casts. 

任何想法?

+1

字符串「沒有運氣」不是PostgreSQL中內置的錯誤消息。 – 2013-08-29 16:08:43

+2

'||'運算符*應該*工作。你收到什麼錯誤信息? –

+0

嗯,出於某種原因,它不明白'我的新弦'應該是文本。嘗試鑄造它。 – 2013-08-29 16:16:58

回答

3

在PostgreSQL的類型系統中,字面值'My New String'不是varchartext值,而是unknown類型的文字,它可以作爲任何類型進行處理。 (例如,文字爲date可以'2013-08-29';這不會被處理爲一個varchar然後轉換爲date,將它解釋爲「date字面」以非常低的電平)

通常, PostgreSQL的可以自動推斷類型,但是當它不能,你需要使用下面告訴它你想要的文字被當作一個text

  • text 'My New String'(SQL標準的文字語法)
  • Cast('My New String' as text)(SQL標準演員s yntax,但沒有真正在這種情況下鑄造)
  • 'My New String'::text(PostgreSQL的非標投的語法,但相當的可讀性)

在你的情況下,錯誤消息operator is not unique: unknown || text[]是說,有多種類型的Postgres可以將字面解釋爲,每個都有自己對||運算符的定義。

你因此也需要這樣的事(我已經刪除了不必要的括號內):

update page set tags = 'My New String'::text || tags; 
+0

行 - 行得通 - 它使用該語法做了更新(非常感謝您的詳細解答 - 我正在學習!) – homermac