PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist der beste Weg, um eine Teilmenge der Zeilen einer Tabelle in Postgres von einer Datenbank in eine andere zu kopieren?

Quelle:

psql -c "COPY (SELECT * FROM mytable WHERE ...) TO STDOUT" > mytable.copy

Ziel:

psql -c "COPY mytable FROM STDIN" < mytable.copy

Dies setzt voraus, dass mytable sowohl in der Quelle als auch im Ziel das gleiche Schema und die gleiche Spaltenreihenfolge hat. Wenn dies nicht der Fall ist, können Sie es mit STDOUT CSV HEADER versuchen und STDIN CSV HEADER statt STDOUT und STDIN , aber ich habe es nicht ausprobiert.

Wenn Sie benutzerdefinierte Trigger auf mytable haben, müssen Sie diese möglicherweise beim Importieren deaktivieren:

psql -c "ALTER TABLE mytable DISABLE TRIGGER USER; \
         COPY mytable FROM STDIN; \
         ALTER TABLE mytable ENABLE TRIGGER USER" < mytable.copy