Saya tidak yakin apakah SQL standarnya:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
Apa yang saya cari adalah: bagaimana jika tblA dan tblB berada di Server DB yang berbeda .
Apakah PostgreSql memberikan utilitas apa pun atau memiliki fungsi apa pun yang akan membantu untuk digunakan INSERT query with PGresult struct
Maksud saya SELECT id, time FROM tblB ...
akan kembali PGresult*
menggunakan PQexec
. Apakah mungkin untuk menggunakan struct ini di lain PQexec
untuk menjalankan perintah INSERT.
EDIT:
Jika tidak memungkinkan maka saya akan mengekstraksi nilai dari PQresult * dan membuat beberapa sintaks pernyataan INSERT seperti:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Apakah mungkin untuk membuat pernyataan yang disiapkan dari ini !! :(
sql
postgresql
insert
dblink
Mayank
sumber
sumber
Jawaban:
Seperti yang ditulis Henrik, Anda dapat menggunakan dblink untuk menghubungkan database jarak jauh dan mengambil hasil. Sebagai contoh:
PostgreSQL memiliki record pseudo-type (hanya untuk argumen fungsi atau jenis hasil), yang memungkinkan Anda melakukan kueri data dari tabel lain (tidak diketahui).
Edit:
Anda dapat menjadikannya sebagai pernyataan yang disiapkan jika Anda mau dan itu berfungsi juga:
Edit (ya, lainnya):
Saya baru saja melihat pertanyaan Anda yang direvisi (ditutup sebagai duplikat, atau sangat mirip dengan ini).
Jika pemahaman saya benar (postgres memiliki tbla dan dbtest memiliki tblb dan Anda ingin memasukkan jarak jauh dengan pilih lokal , bukan pilih jarak jauh dengan sisipan lokal seperti di atas):
Saya tidak suka dblink bersarang itu, tetapi AFAIK saya tidak bisa merujuk ke tblB di dblink_exec body. Gunakan LIMIT untuk menentukan 20 baris teratas, tetapi saya pikir Anda perlu mengurutkannya menggunakan klausa ORDER BY terlebih dahulu.
sumber
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Bolehkah saya membuat pernyataan yang dipersiapkan dari ini?Jika Anda ingin memasukkan ke kolom tentukan:
sumber
Anda dapat menggunakan dblink untuk membuat tampilan yang diselesaikan di database lain. Database ini mungkin ada di server lain.
sumber
INSERT INTO ... (SELECT FROM ...)
kerja menggunakan dblink. Yang saya butuhkan adalahINSERT INTO ...
menjalankan sesi dblink ke Server DB lain, tetapi(SELECT FROM ...)
dalam sesi saya saat ini.Notasi ini (pertama kali terlihat di sini ) terlihat berguna juga:
sumber
sumber
Berikut solusi alternatif, tanpa menggunakan
dblink
.Misalkan B mewakili database sumber dan A mewakili database target: Kemudian,
Salin tabel dari DB sumber ke DB target:
Buka prompt psql, sambungkan ke target_db , dan gunakan perintah sederhana
insert
:Terakhir, hapus salinan source_table yang Anda buat di target_table .
sumber