J'ai un schéma de base de données nommé: nyummy
et une table nommée cimory
:
create table nyummy.cimory (
id numeric(10,0) not null,
name character varying(60) not null,
city character varying(50) not null,
CONSTRAINT cimory_pkey PRIMARY KEY (id)
);
Je souhaite exporter les cimory
données de la table en tant que fichier de script SQL d'insertion. Cependant, je souhaite uniquement exporter les enregistrements / données où la ville est égale à «tokyo» (en supposant que les données de la ville sont toutes en minuscules).
Comment faire?
Peu importe que la solution soit dans des outils GUI gratuits ou en ligne de commande (bien que la solution d'outils GUI soit meilleure). J'avais essayé pgAdmin III, mais je ne trouve pas d'option pour le faire.
Réponses:
Créez une table avec l'ensemble que vous souhaitez exporter, puis utilisez l'utilitaire de ligne de commande pg_dump pour exporter vers un fichier:
--column-inserts
videra sous forme de commandes d'insertion avec des noms de colonne.--data-only
ne videz pas le schéma.Comme indiqué ci-dessous, la création d'une vue dans au lieu d'une table évitera la création de table chaque fois qu'une nouvelle exportation est nécessaire.
la source
create view export_view...
, car la vue resterait à jour avec les modifications apportées à la table de base. Les docs disent--table=table: Dump only tables (or **views**...
que j'avais donc un peu d'espoir que cela fonctionnerait, mais le dumping d'une vue ne donne malheureusement aucune donnée. : Ppg_dump --table=my_schema.my_view --data-only --inserts my_db > data.sql
version 9.5.3 et macreate
déclaration était la même que la vôtre saufcreate view...
. Tout ce que j'obtiens dans la sortie est les commentaires et lesSET
déclarations habituels de pg_dump . Je ne sais pas où je vais mal.Pour une exportation que les données utilisation
COPY
.Vous obtenez un fichier avec une ligne de tableau par ligne en texte brut (pas de
INSERT
commandes), il est plus petit et plus rapide:Importez le même dans une autre table de la même structure n'importe où avec:
COPY
écrit et lit des fichiers locaux sur le serveur , contrairement aux programmes clients commepg_dump
oupsql
qui lisent et écrivent des fichiers locaux sur le client . Si les deux s'exécutent sur la même machine, cela n'a pas beaucoup d'importance, mais c'est le cas pour les connexions à distance.Il y a aussi la
\copy
commande de psql qui:la source
insert
commandes, n'est-ce pas?STDIN
etSTDOUT
peut être utilisé à la place du chemin de fichier, utile pour les petites exportations de données.--column-inserts
indicateur, pg_dump utilise unCOPY
de STDIN pour chacune des tables dans le code SQL qu'il génère.C'est un moyen facile et rapide d' exporter une table vers un script avec pgAdmin manuellement sans installations supplémentaires :
Cette méthode fonctionne également avec la technique de création d'un export_table comme démontré dans la réponse de @Clodoaldo Neto.
la source
SQL Workbench possède une telle fonctionnalité.
Après avoir exécuté une requête, faites un clic droit sur les résultats de la requête et choisissez "Copier les données en tant que SQL> Insertion SQL"
la source
Pour mon cas d'utilisation, j'ai pu simplement diriger vers grep.
la source
J'ai essayé d'écrire une procédure faisant cela, basée sur les codes @PhilHibbs, d'une manière différente. Veuillez jeter un œil et tester.
Puis :
testé sur mon postgres 9.1, avec une table avec type de données à champs mixtes (texte, double, int, horodatage sans fuseau horaire, etc.).
C'est pourquoi le CAST en type TEXT est nécessaire. Mon test fonctionne correctement pour environ 9 millions de lignes, il semble qu'il échoue juste avant 18 minutes de fonctionnement.
ps: J'ai trouvé un équivalent pour mysql sur le WEB.
la source
Vous pouvez afficher la table avec des enregistrements spécifiques, puis vider le fichier sql
la source
Je viens de lancer une procédure rapide pour ce faire. Cela ne fonctionne que pour une seule ligne, donc je crée une vue temporaire qui sélectionne simplement la ligne que je veux, puis je remplace pg_temp.temp_view par la table réelle dans laquelle je veux insérer.
Appelé ainsi:
Je n'ai pas testé cela contre les attaques par injection, veuillez me faire savoir si l'appel quote_literal n'est pas suffisant pour cela.
De plus, cela ne fonctionne que pour les colonnes qui peuvent être simplement converties en :: text et inversement.
C'est aussi pour Greenplum mais je ne peux pas penser à une raison pour laquelle cela ne fonctionnerait pas sur Postgres, CMIIW.
la source
avez-vous essayé dans pgadmin l'exécution de la requête avec
" EXECUTE QUERY WRITE RESULT TO FILE "
optionsa seule exportation des données, sinon essayez comme
-t option utilisée pour ==> Vider uniquement les tables (ou vues ou séquences) correspondant à la table, voir
la source
create view
déclaration