Thread: [HACKERS] INSERT INTO arr2(array[1].d, array[2].d)

[HACKERS] INSERT INTO arr2(array[1].d, array[2].d)

From
Jim Nasby
Date:
Over in [1], I was very surprised to discover $SUBJECT[2]. I looked in 
the docs, and they clearly indicate that INSERT accepts "column names".

What's the best way to describe this? "column expression"? "field 
expression"?

1: 
https://www.postgresql.org/message-id/20170311005810.kuccp7t5t5jhe736@alap3.anarazel.de

2:
CREATE TABLE arr(d int[]);
CREATE TABLE arr2(arr arr)
INSERT INTO arr2(arr[1].d, arr[2].d) VALUES(ARRAY[1,2],ARRAY[3,4]) 
RETURNING *
┌───────────────────────────────┐
│              arr              │
├───────────────────────────────┤
│ {"(\"{1,2}\")","(\"{3,4}\")"} │
└───────────────────────────────┘
-- 
Jim Nasby, Chief Data Architect, OpenSCG
http://OpenSCG.com



Re: [HACKERS] INSERT INTO arr2(array[1].d, array[2].d)

From
Andres Freund
Date:
On 2017-03-11 14:43:55 -0600, Jim Nasby wrote:
> Over in [1], I was very surprised to discover $SUBJECT[2]. I looked in the
> docs, and they clearly indicate that INSERT accepts "column names".

They also say "The column name can be qualified with a subfield name or
array subscript, if needed."


> What's the best way to describe this? "column expression"? "field
> expression"?

field expression is the better of the two, but I'm not really convinced
changing.


For reference:
> 1: https://www.postgresql.org/message-id/20170311005810.kuccp7t5t5jhe736@alap3.anarazel.de

> 
> 2:
> CREATE TABLE arr(d int[]);
> CREATE TABLE arr2(arr arr)
> INSERT INTO arr2(arr[1].d, arr[2].d) VALUES(ARRAY[1,2],ARRAY[3,4]) RETURNING
> *
> ┌───────────────────────────────┐
> │              arr              │
> ├───────────────────────────────┤
> │ {"(\"{1,2}\")","(\"{3,4}\")"} │
> └───────────────────────────────┘

- Andres