質問するログイン新規登録

回答編集履歴

4

訂正

2019/02/05 08:38

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  FROM test
8
8
  ON CONFLICT ON CONSTRAINT test2_pkey
9
9
  DO UPDATE
10
- SET id=excluded.id, name=excluded.name, age=excluded.age
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

リンク先修正

2019/02/05 08:38

投稿

sazi
sazi

スコア25430

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/10/html/sql-insert.html)
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

追記

2019/02/05 08:35

投稿

sazi
sazi

スコア25430

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

修正

2019/02/05 08:34

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,10 +1,10 @@
1
1
  エラー自体はSET構文中にFROMを使用しているからです。
2
- 以下の様にselectで参照しているテーブルを参照するように記述します。
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=test.id, name=test.name, age=test.age
9
+ SET id=excluded.id, name=excluded.name, age=excluded.age
10
10
  ```