PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql:INSERT INTO ... (ИЗБЕРЕТЕ * ...)

Както Хенрик писа, можете да използвате 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 има псевдотип на запис (само за аргумент на функцията или тип резултат), който ви позволява да заявявате данни от друга (неизвестна) таблица.

Редактиране:

Можете да го направите като подготвено изявление, ако искате и той също работи:

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Коригирайте „ГРЕШКА:  колона „colname“ не съществува“ в PostgreSQL, когато използвате UNION, EXCEPT или INTERSECT

  2. Как да създадете PostgreSQL база данни

  3. ФАТАЛНО:удостоверяването на паролата не бе успешно за потребител postgres (postgresql 11 с pgAdmin 4)

  4. Разлика между тип данни DECIMAL и NUMERIC в PSQL

  5. Основно наблюдение на PostgreSQL – част 1