datenbank:postgresql_dump
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
PostgreSQL Dump
siehe auch: PostgreSQL
Tabellen-Schema auslesen
- Nur CREATE TABLE Statements (ohne Daten)
> pg_dump --schema-only \ -t tabelle1 -t tabelle2 -t tabelle3 -t tabelle4 -t tabelle5 \ -U postgres -d database_name \ -f schema_5_tabelles.sql
- Nur CREATE TABLE (ohne Indexe, Constraints, Views)
> pg_dump --schema-only --section=pre-data \ -t tabelle1 -t tabelle2 -t tabelle3 -t tabelle4 -t tabelle5 \ -U postgres -d database_name \ -f create_5_tabelles_only.sql
- Ohne Owner/Privilegien (portabler für andere DB)
> pg_dump --schema-only --no-owner --no-privileges \ -t tabelle1 -t tabelle2 -t tabelle3 -t tabelle4 -t tabelle5 \ -U postgres -d database_name \ -f create_5_tabelles_no_owner.sql
Tabellen-Schema einspielen
- Schema in Ziel-DB einspielen
> psql -U "$USER" -d "$TARGET_DB" -f schema_5_tabelles.sql
ab PostgreSQL Version 15
Was PostgreSQL 15 (Released: Oktober 2022) neu bietet HEADER MATCH für den COPY-Befehl, beim einspielen von Daten – automatische Spalten-Validierung.
Die Tabellen müssen bereits existieren!
- Daten aus DB dumpen
echo "COPY tabelle TO 'export_tabelle.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER true)" | sudo -u postgres psql -d database_name
- zu beachten bei COPY
Ohne Header (mit -t) COPY tabelle FROM 'file.tsv' WITH (FORMAT csv, DELIMITER E'\t'); COPY tabelle FROM 'file.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER false); Mit Header (ohne -t) - Wenn du nur Spaltennamen überspringen willst COPY tabelle FROM 'file.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER); COPY tabelle FROM 'file.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER true); Mit Header (ohne -t) - Wenn du validieren willst, dass Header-Namen passen COPY tabelle FROM 'file.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER MATCH);
- Daten in DB einspielen
echo "COPY tabelle FROM 'export_${TAB}.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER MATCH);" | sudo -u postgres psql -d database_name
Testdaten einspielen
- alte Tabellen löschen
echo "DROP TABLE tabelle;" | sudo -u postgres psql -d testdb
- Tabellen anlegen
cat Test-Tabellen-Schema.sql | psql -d testdb -U dbuser echo "\dt" | sudo -u postgres psql -d testdb
- Header einfügen
(cat header.txt | tr -s '\n' '\t' | sed 's/\t$//'; echo ; cat export.tsv) > export+header.tsv
- Daten einspielen
echo "COPY tabelle1 FROM 'export+header.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER MATCH, NULL '');" | psql -U dbuser -d testdb
- Datensätze zählen
echo "SELECT COUNT(*) AS tabelle FROM tabelle;" | psql -d testdb -U dbuser
/home/http/wiki/data/attic/datenbank/postgresql_dump.1778864665.txt · Zuletzt geändert: von manfred
