回答編集履歴
4
訂正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
FROM test
|
8
8
|
ON CONFLICT ON CONSTRAINT test2_pkey
|
9
9
|
DO UPDATE
|
10
|
-
SET
|
10
|
+
SET name=excluded.name, age=excluded.age
|
11
11
|
```
|
12
12
|
|
13
13
|
[conflict_action](https://www.postgresql.jp/document/9.6/html/sql-insert.html)
|
3
リンク先修正
answer
CHANGED
@@ -10,5 +10,5 @@
|
|
10
10
|
SET id=excluded.id, name=excluded.name, age=excluded.age
|
11
11
|
```
|
12
12
|
|
13
|
-
[conflict_action](https://www.postgresql.jp/document/
|
13
|
+
[conflict_action](https://www.postgresql.jp/document/9.6/html/sql-insert.html)
|
14
14
|
> conflict_actionではON CONFLICTの代替の動作を指定します。 これはDO NOTHINGあるいはDO UPDATE句のいずれかをとることができ、後者では競合が発生した場合に実行されるUPDATEの動作の正確な詳細を記述します。 ON CONFLICT DO UPDATEのSET句とWHEREは既存の行にテーブルの名前(または別名)を使ってアクセスでき、また**挿入されようとしていた行には、特別なexcludedテーブルを使ってアクセスできます。** excludedの列を読み取るときには、対象テーブルの対応する列のSELECT権限が必要です。
|
2
追記
answer
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
エラー自体はSET構文中にFROMを使用しているからです。
|
2
2
|
以下の様にexcludedで参照するように記述します。
|
3
|
+
|
3
4
|
```SQL
|
4
5
|
INSERT INTO test2
|
5
6
|
SELECT *
|
@@ -7,4 +8,7 @@
|
|
7
8
|
ON CONFLICT ON CONSTRAINT test2_pkey
|
8
9
|
DO UPDATE
|
9
10
|
SET id=excluded.id, name=excluded.name, age=excluded.age
|
10
|
-
```
|
11
|
+
```
|
12
|
+
|
13
|
+
[conflict_action](https://www.postgresql.jp/document/10/html/sql-insert.html)
|
14
|
+
> conflict_actionではON CONFLICTの代替の動作を指定します。 これはDO NOTHINGあるいはDO UPDATE句のいずれかをとることができ、後者では競合が発生した場合に実行されるUPDATEの動作の正確な詳細を記述します。 ON CONFLICT DO UPDATEのSET句とWHEREは既存の行にテーブルの名前(または別名)を使ってアクセスでき、また**挿入されようとしていた行には、特別なexcludedテーブルを使ってアクセスできます。** excludedの列を読み取るときには、対象テーブルの対応する列のSELECT権限が必要です。
|
1
修正
answer
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
エラー自体はSET構文中にFROMを使用しているからです。
|
2
|
-
以下の様に
|
2
|
+
以下の様にexcludedで参照するように記述します。
|
3
3
|
```SQL
|
4
4
|
INSERT INTO test2
|
5
5
|
SELECT *
|
6
6
|
FROM test
|
7
7
|
ON CONFLICT ON CONSTRAINT test2_pkey
|
8
8
|
DO UPDATE
|
9
|
-
SET id=
|
9
|
+
SET id=excluded.id, name=excluded.name, age=excluded.age
|
10
10
|
```
|