PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quelle est la meilleure façon de copier un sous-ensemble des lignes d'une table d'une base de données à une autre dans Postgres ?

Origine :

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

Destinataire :

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

Cela suppose que mytable a le même schéma et le même ordre de colonnes dans la source et la destination. Si ce n'est pas le cas, vous pouvez essayer STDOUT CSV HEADER et STDIN CSV HEADER au lieu de STDOUT et STDIN , mais je n'ai pas essayé.

Si vous avez des déclencheurs personnalisés sur mytable, vous devrez peut-être les désactiver lors de l'importation :

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