[解決済み] ポストグレスク に挿入... (SELECT * ...)
質問
標準的なSQLかどうかわからないのですが。
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
私が求めているのは tblA と tblB が異なる DB サーバーにある場合はどうなりますか? .
PostgreSql は、以下のようなユーティリティや機能を提供しますか?
INSERT query with PGresult struct
つまり
SELECT id, time FROM tblB ...
が返されます。
PGresult*
を使用すると
PQexec
. この構造体を別の
PQexec
を実行して、INSERTコマンドを実行します。
EDITです。
もし不可能なら、PQresult*から値を抽出して、次のような複数のINSERT文の構文を作成することになるでしょう。
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
これでプリペアドステートメントを作ることは可能なのでしょうか! :(
どのように解決するのですか?
Henrikが書いているように、dblinkを使ってリモートデータベースに接続し、結果を取得することができます。例えば
psql dbtest
CREATE TABLE tblB (id serial, time integer);
INSERT INTO tblB (time) VALUES (5000), (2000);
psql postgres
CREATE TABLE tblA (id serial, time integer);
INSERT INTO tblA
SELECT id, time
FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB')
AS t(id integer, time integer)
WHERE time > 1000;
TABLE tblA;
id | time
----+------
1 | 5000
2 | 2000
(2 rows)
PostgreSQLは 記録 擬似型(関数の引数や結果の型のみ)で、別の(未知の)テーブルからデータを照会することができます。
編集する
必要ならprepared statementにすれば、同様に動作します。
PREPARE migrate_data (integer) AS
INSERT INTO tblA
SELECT id, time
FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB')
AS t(id integer, time integer)
WHERE time > $1;
EXECUTE migrate_data(1000);
-- DEALLOCATE migrate_data;
編集(ええ、もう一回)。
今、あなたの 修正質問 (重複、またはこれと非常に類似しているとして閉鎖)。
私の理解が正しければ(postgresはtbla、dbtestはtblb、そしてあなたは ローカルセレクトでリモートインサート ではなく リモートセレクト・ローカルインサート のように)。
psql dbtest
SELECT dblink_exec
(
'dbname=postgres',
'INSERT INTO tbla
SELECT id, time
FROM dblink
(
''dbname=dbtest'',
''SELECT id, time FROM tblb''
)
AS t(id integer, time integer)
WHERE time > 1000;'
);
ネストされたdblinkは好きではありませんが、AFAIKでは、tblBへの参照は dblink_exec の本体です。LIMITを使って上位20行を指定しますが、その前にORDER BY句でソートする必要があると思います。
関連
-
[解決済み] SQL Server - 'RETURN'付近の、条件が想定されるコンテキストで指定された、非ブール型の式。
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PL/SQL SELECTに複数のCOUNT(DISTINCT xxx)を指定すると、予期しない結果になる。
-
[解決済み】SQLクエリ「00904. 00000 - "%s: 無効な識別子"
-
[解決済み】使用されるSELECT文は列の数が異なる(REDUX!)
-
[解決済み】警告。Aqua Data Studioの集約や他のSET操作でNull値が排除される。
-
[解決済み】SQL Serverは「集約関数やサブクエリを含む式に対して集約関数を実行できない」が、Sybaseはできる。
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] "このSqlTransactionは完了しました。もう使用できません。"...設定エラー?
-
[解決済み] Oracle(LiveSQL)のSQL [重複]について
-
[解決済み] VBA - ADODB.CommandTextの実行