J'essaie de copier une table entière d'une base de données à une autre dans Postgres. Aucune suggestion?
273
J'essaie de copier une table entière d'une base de données à une autre dans Postgres. Aucune suggestion?
Réponses:
Extrayez la table et dirigez-la directement vers la base de données cible:
Remarque: Si l'autre base de données a déjà la table configurée, vous devez utiliser l'
-a
indicateur pour importer uniquement des données, sinon vous pouvez voir des erreurs étranges comme "Mémoire insuffisante":la source
pg_dump -U remote_user -h remote_server -t table_to_copy source_db | psql target_db
-a
indicateur pour les données uniquement . iepg_dump -a -t my_table my_db | psql target_db
. Pendant que je suis ici, si votre base de données est sur un serveur, je trouve plus facile de simplement vider la base de données dans un fichier, puis de scper ce fichier dans la base de données, puis d'envoyer le contenu du fichier à psql. par exemplepg_dump -a -t my_table my_db > my_file.sql
et après avoir mis cela sur votre serveur ->psql my_other_db < my_file.sql
pg_dump -t '"tableToCopy"' source_db | psql target_db
. Notez que les guillemets simples ET doubles entourent le nom de la tableVous pouvez également utiliser la fonctionnalité de sauvegarde de pgAdmin II. Suivez simplement ces étapes:
Fonctionne bien et peut faire plusieurs tables à la fois.
la source
Objects
section. Sous OSX, cliquez sur le bouton SQL ou obtenez leSQL Editor
via leTools
menu pour coller le SQL copié à partir du fichier de sauvegarde.Utiliser dblink serait plus pratique!
la source
Utilisation de psql, sur un hôte Linux disposant d'une connectivité aux deux serveurs
la source
PGPASSWORD=password1 psql -U ...
alors vous n'avez même pas besoin de sous-shell explicites! Normalement, vous voudrez faire quelques choses à configurer en premier, donc des sous-coquilles peuvent être nécessaires de toute façon. De plus, les mots de passe ne seront pas exportés dans les processus suivants. Merci!pg_dump -t '<table_name>' --schema-only
Installez d' abord dblink
Ensuite, vous feriez quelque chose comme:
la source
INSERT INTO l_tbl (l_col1, l_col2, l_col3) SELECT * FROM dblink('dbname=r_db hostaddr=r_ip password=r_pass user=r_usr', 'select r_col1, r_col2, r_col3 from r_tbl where r_col1 between ''2015-10-29'' AND ''2015-10-30'' ') AS t1(col1 MACADDR, col2 TIMESTAMP, col3 NUMERIC(7,1));
(l signifie local, r est distant. Échapper les guillemets simples. Fournir les types de col.)Utilisez pg_dump pour vider les données de la table, puis restaurez-les avec psql.
la source
Si vous avez les deux serveurs distants, vous pouvez suivre ceci:
Il copiera la table mentionnée de la base de données source dans la même table nommée de la base de données cible, si vous avez déjà un schéma existant.
la source
Vous pouvez effectuer les opérations suivantes:
la source
Voici ce qui a fonctionné pour moi. Premier vidage dans un fichier:
puis chargez le fichier vidé:
la source
Pour déplacer une table de la base de données A vers la base de données B dans votre configuration locale, utilisez la commande suivante:
la source
export PGPASSWORD=<passw>
avant d'exécuter la commandeJ'ai essayé certaines des solutions ici et elles ont été vraiment utiles. D'après mon expérience, la meilleure solution consiste à utiliser la ligne de commande psql , mais parfois je n'ai pas envie d'utiliser la ligne de commande psql. Voici donc une autre solution pour pgAdminIII
Le problème avec cette méthode est que le nom des champs et leurs types de table que vous souhaitez copier doivent être écrits.
la source
pg_dump
ne fonctionne pas toujours.Étant donné que vous avez la même table ddl dans les deux dbs, vous pouvez la pirater de stdout et stdin comme suit:
la source
Identique aux réponses de user5542464 et Piyush S. Wanare, mais divisé en deux étapes:
sinon le pipe demande les deux mots de passe en même temps.
la source
Vous devez utiliser DbLink pour copier les données d'une table dans une autre table dans une base de données différente. Vous devez installer et configurer l'extension DbLink pour exécuter une requête de base de données croisée.
J'ai déjà créé un article détaillé sur ce sujet. Veuillez visiter ce lien
la source
Vérifiez ce script python
la source
Si les deux bases de données (de et vers) sont protégées par mot de passe, dans ce scénario, le terminal ne demandera pas le mot de passe pour les deux bases de données, l'invite de mot de passe n'apparaîtra qu'une seule fois. Donc, pour résoudre ce problème, transmettez le mot de passe avec les commandes.
la source
J'utilisais DataGrip (By Intellij Idea). et il était très facile de copier des données d'une table (dans une base de données différente à une autre).
Tout d'abord, assurez-vous que vous êtes connecté aux deux DataSources dans Data Grip.
Sélectionnez le tableau source et appuyez sur F5 ou (Cliquez avec le bouton droit -> Sélectionnez Copier le tableau vers.)
Cela vous montrera une liste de toutes les tables (vous pouvez également rechercher en utilisant un nom de table dans la fenêtre contextuelle). Sélectionnez simplement votre cible et appuyez sur OK.
DataGrip s'occupera de tout le reste pour vous.
la source
Si vous exécutez pgAdmin (Backup
pg_dump
:, Restore:) àpg_restore
partir de Windows, il essaiera de sortir le fichier par défautc:\Windows\System32
et c'est pourquoi vous obtiendrez une erreur d'autorisation / d'accès refusé et non pas parce que l'utilisateur postgres n'est pas assez élevé. Exécutez pgAdmin en tant qu'administrateur ou choisissez simplement un emplacement pour la sortie autre que les dossiers système de Windows.la source
Comme alternative, vous pouvez également exposer vos tables distantes en tant que tables locales à l'aide de l'extension de wrapper de données étrangères. Vous pouvez ensuite insérer dans vos tables en sélectionnant parmi les tables de la base de données distante. Le seul inconvénient, c'est que ce n'est pas très rapide.
la source