Re: Puzzled by ROW constructor behaviour?

Поиск
Список
Период
Сортировка
От Steve Baldwin
Тема Re: Puzzled by ROW constructor behaviour?
Дата
Msg-id CAKE1Aiafb1CRVdFJnbALXnkRRF=1_EYOOe2naQujVvKxS3MbkA@mail.gmail.com
обсуждение исходный текст
Ответ на Puzzled by ROW constructor behaviour?  (Eagna <eagna@protonmail.com>)
Список pgsql-general
Hi Eagna,

Did you check the syntax of the INSERT statement? You either need 'VALUES ...' or a query. I don't think your expression on its own is considered a query.

Cheers,

Steve

On Wed, Nov 23, 2022 at 8:11 AM Eagna <eagna@protonmail.com> wrote:

Hi all,

I'm puzzled by some behaviour of the ROW constructor that I noticed when I was playing around.

From the documentation (https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS), we have

NUMBER 1

> SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same') AS test1;

result:

> test1
> f

This is fine.

and then

NUMBER 2

> SELECT ROW(1, 2.5, 'this is a test') = (VALUES (1, 2.5, 'this is a test')) AS test2;

result:

> test2
> t

OK - notice the equivalence of a ROW constructor and a VALUES clause.

So, then I create this table:

> CREATE TABLE test
> (
>  a INT NOT NULL,
>  b INT NOT NULL,
>  c TEXT NOT NULL
> );

and then tried:

NUMBER 3

> INSERT INTO test ((ROW (1, 2.4, 'test...')));

and I get:

> ERROR:  syntax error at or near "ROW"
> LINE 1: INSERT INTO test ((ROW (1, 2.4, 'test...')));


I tried various permutations of brackets and whatnot but nothing doing.


My question is that if a ROW constructor works for a VALUES clause in statement NUMBER 2, then why not NUMBER 3?


TIA and rgs,

E.




В списке pgsql-general по дате отправления:

Предыдущее
От: Eagna
Дата:
Сообщение: Puzzled by ROW constructor behaviour?
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Upgrading to v12