sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql:INSERT INTO ... (VÆLG * ...)

Som Henrik skrev kan du bruge dblink til at forbinde ekstern database og hente resultat. For eksempel:

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 har record pseudo-type (kun for funktions argument eller resultattype), som giver dig mulighed for at forespørge data fra en anden (ukendt) tabel.

Rediger:

Du kan lave det som forberedt erklæring, hvis du vil, og det virker også:

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;

Rediger (ja, en anden):

Jeg har lige set dit reviderede spørgsmål (lukket som dublet, eller bare meget lig dette).

Hvis min forståelse er korrekt (postgres har tbla og dbtest har tblb og du vil have fjernindsættelse med lokalt vælg , ikke fjernvalg med lokal indsættelse som ovenfor):

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

Jeg kan ikke lide den indlejrede dblink, men AFAIK kan jeg ikke referere til tblB i dblink_exec body. Brug LIMIT til at angive de øverste 20 rækker, men jeg tror, ​​du skal sortere dem ved at bruge ORDER BY-klausulen først.



  1. Forkert strengværdi:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

  2. Åbner Android Sqlite-databasen i fragment

  3. PostgreSQL installation på Docker

  4. ActiveRecord::AdapterNotSpecified databasekonfiguration angiver ikke adapter