2013-08-29 38 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