0

次の問題があります(PostgreSQL)。

目的:

  • 一時テーブルからデータを読み取るtmp
  • これを別のテーブルに処理しますy
  • からのデータと組み合わせたnextvalfrom テーブルを使用します。ytmp

私はこれが仕事をするだろうと思った:

INSERT INTO y (v1, v2) VALUES (nextval(y.v1), SELECT v2 FROM tmp)

も試しました:

INSERT INTO y (v1, v2) VALUES (SELECT nextval(y.v1), v2 FROM tmp)

誰もこれを行う方法を説明できますか?

4

1 に答える 1

0

あなたが示したコードには2つの誤解/エラーがあります:

  1. nextval()列名ではなく、シーケンスの名前が必要です。
  2. selectステートメントのデータを提供するためにステートメントが使用されている場合insertは、使用できませんvalues()

次のようなものが欲しいと思います:

insert into y (v1, v2) 
select nextval(...), v2 
from tmp;

「テーブル y の nextval を使用する」という意味がよくわかりません。すでに述べたように、 nextval() は、テーブルや列ではなくシーケンスで動作します。「y.v1 に関連付けられたシーケンスから nextval を取得する」ことを意味y.v1し、列として定義されているserial場合は、次のようなことができます。

insert into y (v1, v2) 
select nextval(pg_get_serial_sequence('y','v1')), v2 
from tmp;

しかし、これはv1次のように定義する必要がありますserial

于 2016-04-13T12:22:40.753 に答える