J'ai une base de données nommée "A" qui a deux schémas "B" et "C". Je veux sauvegarder et restaurer le schéma "B" sur un autre serveur? Je ne sais pas comment faire cela, car je suis nouveau à Postgres. Dois-je créer une nouvelle base de données sur un nouveau serveur portant le nom "A", puis restaurer le schéma "B" dessus. pls aider avec les commandes.
--- informations provenant du commentaire sur la réponse de Peter:
Je souhaite sauvegarder et restaurer les données du schéma "B" +. Deuxièmement, j'ai oublié de mentionner que Postgresql 9.1 fonctionnant sur Ubuntu 12.04
Vous pouvez sélectionner les schémas à vider avec le -n
option de pg_dump. Créez un vidage du schéma B:
pg_dump ...other...options... -Fc -n B >dump.dmp
Restaurez le fichier de vidage:
pg_restore -d somedb dump.dmp
La base de données cible ne doit pas nécessairement avoir le même nom que la base d'origine.
Notez que vous aurez des problèmes si le schéma B a des dépendances sur le schéma C. Vous ne pourrez alors pas le restaurer séparément.
Vous pouvez ajouter le paramètre -n [schema name]
Le commentaire de ce paramètre est dit:
-n schema --schema=schema
Vider uniquement les schémas correspondant au schéma; cela sélectionne à la fois le schéma lui-même et tous ses objets contenus. Lorsque cette option n'est pas spécifiée, tous les schémas non système de la base de données cible seront vidés.
* Exemple de base:
Je crée des fichiers "dump.bat" et "restore.bat" dans la fenêtre pour vider/restaurer
1/Sauvegarde:
"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" --Host localhost --port 5432 --username "postgres" --role "postgres" --format plain --encoding UTF8 --schema-only --file "dump_resul.sql" --schema "name_schema_B" "name_database_A"
Résultats:
-- PostgreSQL database dump
-- Dumped from database version 9.1.4
-- Dumped by pg_dump version 9.1.4
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
CREATE TABLE abtb_temp (
id bigint NOT NULL,
app_code character varying(100)
); ....
* Remarque: quelques options importantes:
--data-only, --format=format (ex: format=tar -> if you have a big database), --schema-only, --table=table (ex: --table=schema_name.table_name) ...
2/Restaurer: "C:\Program Files\PostgreSQL\9.1\bin\pg_restore.exe" --Host localhost --port 5432 --username "postgres" --dbname "any_database" --no-password --no-owner --no-privileges --schema name_schema_B --verbose "C:\dump_resul.sql"
(**)
(**) En réalité, si votre fichier de format est * .sql, vous pouvez utiliser pgAdmin (ou psql) pour restaurer. Vous devez utiliser pg_restore pour restaurer un fichier . Tar (. Bakup ...)
J'ai écrit un script qui rend cela trivial. Exportation facile des fonctions SQL et des schémas de table dans un *.sql
des dossiers. Facilite la gestion, la sauvegarde et le contrôle des sources:
#!/bin/sh
# Export all table schemas and functions into individual *.sql files for easy management and source control.
TEMP_WORK_PATH="/tmp/postgres"
BACKUP_ROOT_PATH="/vagrant/backup" # This is where your *.sql files will be exported at
DATABASE_NAME="myapp_db"
DATABASE_TABLES_PREFIX="myapp_"
POSTGRES_USER="postgres"
POSTGRES_PASSWORD="postgres"
[ -d $TEMP_WORK_PATH ] || mkdir -p $TEMP_WORK_PATH
rm -rf $TEMP_WORK_PATH/*
[ -d $BACKUP_ROOT_PATH ] || mkdir -p $BACKUP_ROOT_PATH
rm -rf $BACKUP_ROOT_PATH/*
mkdir $BACKUP_ROOT_PATH/tables
mkdir $BACKUP_ROOT_PATH/routines
export PGPASSWORD=$POSTGRES_PASSWORD
cd $TEMP_WORK_PATH
# Get all table schemas and write to individual files
echo "Export table schemas..."
for table in $(psql -U $POSTGRES_USER -d $DATABASE_NAME -t -c "Select table_name From information_schema.tables Where table_type='BASE TABLE' and table_name like '$DATABASE_TABLES_PREFIX%'");
do pg_dump -st $table -U $POSTGRES_USER $DATABASE_NAME > $BACKUP_ROOT_PATH/tables/$table.sql;
done;
# Get all functions in db and output to one file
echo "Getting stored functions..."
psql -U $POSTGRES_USER -At $DATABASE_NAME > $TEMP_WORK_PATH/db_functions.sql <<EOF
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
EOF
# Split function file into separate files per function
echo "Exporting stored functions..."
csplit -f function -b '%d.sql' db_functions.sql '/FUNCTION/' '{*}'
# Rename the function files to match the function name in the file
# then place the files into the target backup directory
counter=1
while [ -f $TEMP_WORK_PATH/function$counter.sql ]
do
name=$(head -1 function$counter.sql | awk {'print $5'})
name=$(echo $name | cut -d "." --f 2 | cut -d "(" --f 1)
mv function$counter.sql $BACKUP_ROOT_PATH/routines/$name.sql
counter=$((counter+1))
done
echo "done"
https://Gist.github.com/dantheman213/aff70ee42a11f2d1fa46983878cd62e1