Ich habe ein Datenbankschema mit dem Namen: nyummy
und eine Tabelle mit dem Namen 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)
);
Ich möchte cimory
die Daten der Tabelle als SQL-Skriptdatei einfügen exportieren . Ich möchte jedoch nur Datensätze / Daten exportieren, bei denen die Stadt gleich "Tokio" ist (vorausgesetzt, die Stadtdaten sind alle in Kleinbuchstaben).
Wie es geht?
Es spielt keine Rolle, ob sich die Lösung in Freeware-GUI-Tools oder in der Befehlszeile befindet (obwohl die GUI-Tools-Lösung besser ist). Ich habe pgAdmin III ausprobiert, kann aber keine Option dafür finden.
Antworten:
Erstellen Sie eine Tabelle mit dem Satz, den Sie exportieren möchten, und exportieren Sie dann mit dem Befehlszeilenprogramm pg_dump in eine Datei:
--column-inserts
wird als Einfügebefehle mit Spaltennamen ausgegeben.--data-only
Schema nicht sichern.Wie unten kommentiert, wird durch das Erstellen einer Ansicht anstelle einer Tabelle die Tabellenerstellung vermieden, wenn ein neuer Export erforderlich ist.
quelle
create view export_view...
, da die Ansicht mit Änderungen an der Basistabelle auf dem neuesten Stand bleiben würde. Die Dokumente sagen,--table=table: Dump only tables (or **views**...
dass ich einige Hoffnung hatte, dass dies funktionieren würde, aber das Speichern einer Ansicht liefert leider keine Daten. : Ppg_dump --table=my_schema.my_view --data-only --inserts my_db > data.sql
Version 9.5.3 verwendet, und meinecreate
Aussage war dieselbe wie Ihre, außercreate view...
. Alles, was ich in der Ausgabe bekomme, sind die üblichen pg_dump-Kommentare und -AnweisungenSET
. Ich bin mir nicht sicher, wo ich falsch liege.Für einen Nur-Daten-Export verwenden
COPY
.Sie erhalten eine Datei mit einer Tabellenzeile pro Zeile als Klartext (keine
INSERT
Befehle). Sie ist kleiner und schneller:Importieren Sie dasselbe in eine andere Tabelle derselben Struktur an einer beliebigen Stelle mit:
COPY
schreibt und liest Dateien lokal auf dem Server , im Gegensatz zu Client-Programmen wiepg_dump
oderpsql
die Dateien lokal auf dem Client lesen und schreiben . Wenn beide auf demselben Computer ausgeführt werden, spielt dies keine große Rolle, dies gilt jedoch für Remoteverbindungen.Es gibt auch den
\copy
Befehl von psql, dass:quelle
insert
Befehle, nicht wahr?STDIN
undSTDOUT
kann anstelle des Dateipfads verwendet werden, der für den Export kleiner Daten nützlich ist.--column-inserts
Flag verwendetCOPY
pg_dump für jede der Tabellen im generierten SQL-Code ein from STDIN.Dies ist eine einfache und schnelle Möglichkeit, eine Tabelle mit pgAdmin manuell ohne zusätzliche Installationen in ein Skript zu exportieren :
Diese Methode funktioniert auch mit der Technik, eine export_table zu erstellen, wie in der Antwort von @Clodoaldo Neto gezeigt.
quelle
SQL Workbench verfügt über eine solche Funktion.
Klicken Sie nach dem Ausführen einer Abfrage mit der rechten Maustaste auf die Abfrageergebnisse und wählen Sie "Daten als SQL kopieren> SQL einfügen".
quelle
Für meinen Anwendungsfall konnte ich einfach auf grep pfeifen.
quelle
Ich habe versucht, eine Prozedur zu schreiben, die auf @PhilHibbs-Codes basiert, auf eine andere Art und Weise. Bitte schauen Sie und testen Sie.
Und dann :
getestet auf meinem Postgres 9.1 mit einer Tabelle mit gemischtem Felddatentyp (Text, Double, Int, Zeitstempel ohne Zeitzone usw.).
Aus diesem Grund wird der Typ CAST in TEXT benötigt. Mein Testlauf wurde für ungefähr 9 Millionen Zeilen korrekt ausgeführt. Es sieht so aus, als ob er kurz vor 18 Minuten fehlschlägt.
ps: Ich habe im WEB ein Äquivalent für MySQL gefunden.
quelle
Sie können die Tabelle mit bestimmten Datensätzen anzeigen und dann die SQL-Datei sichern
quelle
Ich habe gerade eine schnelle Prozedur durchgeführt, um dies zu tun. Es funktioniert nur für eine einzelne Zeile, daher erstelle ich eine temporäre Ansicht, in der nur die gewünschte Zeile ausgewählt wird, und ersetze dann die pg_temp.temp_view durch die tatsächliche Tabelle, in die ich einfügen möchte.
So aufgerufen:
Ich habe dies nicht gegen Injektionsangriffe getestet. Bitte lassen Sie mich wissen, wenn der Aufruf von quote_literal dafür nicht ausreicht.
Es funktioniert auch nur für Spalten, die einfach in :: text und wieder zurück umgewandelt werden können.
Auch dies ist für Greenplum, aber ich kann mir keinen Grund vorstellen, warum es bei Postgres, CMIIW nicht funktionieren würde.
quelle
Haben Sie versucht, in pgadmin eine Abfrage mit
" EXECUTE QUERY WRITE RESULT TO FILE "
Option auszuführen?Es ist nur der Export der Daten, sonst versuchen Sie es wie
-t Option für ==> Dump nur Tabellen (oder Ansichten oder Sequenzen) passende Tabelle, siehe
quelle
create view
Anweisung exportieren