Nie jestem pewien, czy jego standardowy SQL:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
To, czego szukam, to: co, jeśli tblA i tblB znajdują się na różnych serwerach DB .
Czy PostgreSql udostępnia jakieś narzędzie lub ma jakąkolwiek funkcjonalność, która pomoże w użyciu INSERT query with PGresult struct
Mam na myśli, SELECT id, time FROM tblB ...
że zwróci PGresult*
przy użyciu PQexec
. Czy można użyć tej struktury w innej, PQexec
aby wykonać polecenie INSERT.
EDYCJA:
Jeśli nie jest to możliwe, chciałbym wyodrębnić wartości z PQresult * i utworzyć składnię wielu instrukcji INSERT, takich jak:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Czy da się z tego stworzyć przygotowane zestawienie !! :(
sql
postgresql
insert
dblink
Mayank
źródło
źródło
Odpowiedzi:
Jak napisał Henrik, możesz użyć dblink do połączenia ze zdalną bazą danych i pobrania wyniku. Na przykład:
PostgreSQL ma pseudotyp rekordu (tylko dla argumentu funkcji lub typu wyniku), który pozwala na odpytywanie danych z innej (nieznanej) tabeli.
Edytować:
Możesz zrobić to jako przygotowane oświadczenie, jeśli chcesz i również działa:
Edytuj (tak, inny):
Właśnie zobaczyłem Twoje poprawione pytanie (zamknięte jako zduplikowane lub bardzo podobne do tego).
Jeśli moje rozumienie jest poprawne (postgres ma tbla i dbtest ma tblb i chcesz zdalnego wkładkę z lokalnym select , nie zdalnego wybierz z lokalnym wkładką jak wyżej):
Nie podoba mi się ten zagnieżdżony dblink, ale AFAIK nie mogę odwoływać się do tblB w treści dblink_exec . Użyj LIMIT, aby określić 20 pierwszych wierszy, ale myślę, że najpierw musisz je posortować za pomocą klauzuli ORDER BY.
źródło
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Czy mogę zrobić z tego przygotowane oświadczenie?Jeśli chcesz wstawić do określonej kolumny:
źródło
Możesz użyć dblink, aby utworzyć widok, który zostanie rozwiązany w innej bazie danych. Ta baza danych może znajdować się na innym serwerze.
źródło
INSERT INTO ... (SELECT FROM ...)
będzie działać za pomocą dblink. To, czego potrzebuję, toINSERT INTO ...
uruchomienie w sesji dblink na innym serwerze DB, ale(SELECT FROM ...)
w mojej bieżącej sesji.Ta notacja (po raz pierwszy pokazana tutaj ) również wygląda przydatna:
źródło
źródło
Oto alternatywne rozwiązanie bez użycia
dblink
.Załóżmy, że B reprezentuje źródłową bazę danych, a A reprezentuje docelową bazę danych: Następnie
Skopiuj tabelę ze źródłowej bazy danych do docelowej bazy danych:
Otwórz znak zachęty psql, połącz się z target_db i użyj prostego
insert
:Na koniec usuń kopię tabeli source_table , którą utworzyłeś w target_table .
źródło