PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

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

Jak napisał Henrik, można użyć dblink do połączenia zdalnej bazy danych i pobrania wyniku. Na przykład:

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 posiada pseudotyp rekordu (tylko dla argumentu lub typu wyniku funkcji), który pozwala na zapytanie o dane z innej (nieznanej) tabeli.

Edycja:

Możesz zrobić to jako przygotowane zestawienie, jeśli chcesz i to również działa:

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;

Edytuj (tak, inny):

Właśnie zobaczyłem Twoje poprawione pytanie (zamknięte jako duplikat lub po prostu bardzo podobne do tego).

Jeśli moje zrozumienie jest poprawne (postgres ma tbla, a dbtest ma tblb i chcesz zdalne wstawianie z lokalnym wyborem , a nie zdalny wybór za pomocą wstawiania lokalnego jak wyżej):

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

Nie podoba mi się ten zagnieżdżony dblink, ale AFAIK Nie mogę odwoływać się do tblB w ciele dblink_exec. Użyj LIMIT, aby określić 20 pierwszych wierszy, ale myślę, że najpierw musisz je posortować za pomocą klauzuli 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. Praca w kierunku Postgres-XL 9,5

  2. Przegląd nowych procedur składowanych w PostgreSQL 11

  3. Zamów ciąg varchar jako numeryczny

  4. Jak usunąć zduplikowane wiersze bez unikalnego identyfikatora

  5. Jak zautomatyzować wdrażanie bazy danych PostgreSQL