Unintentionally discovered that following query works in PostgreSQL:
UPDATE "sometable" SET "somefield" = ('string1', 'string2') WHERE "id" = 1;
I'm passing an array of strings to field and the result is a string of '("string1","string2")', not an array as expected, at least then using php extension pgsql.
How this happens and that does ('string1', 'string2')
means in PostgreSQL? I don't think this works in other SQL RDBMSes.
Best Answer
You are not passing an array, at least not a Postgres array type.
An array literal would look like this:
You can type it explicitly:
The same can be achieved with an ARRAY constructor in most places:
This is constructing a row (of type "anonymous record"):
It's short syntax for a ROW constructor:
And can, in similar fashion be provided as string literal (row literal) as well:
Each of those anonymous records can be cast to a well know row type:
In the
UPDATE
statement Postgres coerces the value to the data type of the target column or raises an exception if that cannot be done. Ifsometable.somefield
is data typetext
, the text representation of the above row is saved, which is'("string1","string2")'
. Double quotes are only added where necessary to keep the syntax unambiguous.Related:
Why does the behavior of array syntax differ from '(?,?)' syntax when updating a point field and that field is NULL?
PostgreSQL: Issue with passing array to procedure