PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

postgresql:INSERT INTO ... (PILIH * ...)

Seperti yang ditulis Henrik, Anda dapat menggunakan dblink untuk menghubungkan basis data jarak jauh dan mengambil hasil. Misalnya:

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 memiliki record pseudo-type (hanya untuk argumen fungsi atau tipe hasil), yang memungkinkan Anda meminta data dari tabel lain (tidak diketahui).

Sunting:

Anda dapat menjadikannya sebagai pernyataan yang disiapkan jika Anda mau dan itu juga berfungsi:

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;

Sunting (ya, yang lain):

Saya baru saja melihat pertanyaan Anda yang telah direvisi (ditutup sebagai duplikat, atau sangat mirip dengan ini).

Jika pemahaman saya benar (postgres memiliki tbla dan dbtest memiliki tblb dan Anda ingin menyisipkan jarak jauh dengan pilihan lokal , bukan pilihan jarak jauh dengan sisipan lokal seperti di atas):

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;'
);

Saya tidak suka dblink bersarang itu, tetapi AFAIK saya tidak dapat merujuk ke tblB di badan dblink_exec. Gunakan LIMIT untuk menentukan 20 baris teratas, tetapi menurut saya Anda perlu mengurutkannya menggunakan klausa ORDER BY terlebih dahulu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghitung jumlah kemunculan substring dalam string di PostgreSQL

  2. Tidak dapat menemukan pustaka klien PostgreSQL (libpq)

  3. Bagaimana mencegah penghapusan baris pertama dalam tabel (PostgreSQL)?

  4. Membuat Pengguna PostgreSQL &Menambahkannya ke database

  5. Urutkan berdasarkan kolom ASC, tetapi nilai NULL terlebih dahulu?