Je cherche un moyen d'obtenir toutes les lignes sous forme d'instructions INSERT
à partir d'une table spécifique d'une base de données à l'aide de pg_dump
dans PostgreSQL.
Par exemple, j'ai la table A et toutes les lignes de la table A dont j'ai besoin en tant qu'énoncés INSERT
, il doit également vider ces instructions dans un fichier.
Est-ce possible?
si version <8.4.0
pg_dump -D -t <table> <database>
Ajouter -a
avant le -t
_ si vous voulez que les INSERT, sans CREATE TABLE, etc., définissent la table en premier lieu.
version> = 8.4.0
pg_dump --column-inserts --data-only --table=<table> <database>
Si vous voulez vider vos insertions dans un fichier . Sql:
cd
à l'emplacement que vous souhaitez .sql
fichier à localiserpg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql
Noter la > my_dump.sql
commande. Cela mettra tout dans un fichier SQL nommé my_dump
Mettre dans un script j'aime quelque chose comme ça:
#!/bin/bash
set -o xtrace # remove me after debug
TABLE=charge_unit
DB_NAME=prod_sit_entities_db
BASE_DIR=/var/backups/someDir
LOCATION="${BASE_DIR}/myApp_$(date +%Y%m%d_%H%M%S)"
FNAME="${LOCATION}_${DB_NAME}_${TABLE}.sql"
# Create backups directory if not exists
if [[ ! -e $BASE_DIR ]];then
| mkdir $BASE_DIR
| chown -R postgres:postgres $BASE_DIR
fi
Sudo -H -u postgres pg_dump --column-inserts --data-only --table=$TABLE $DB_NAME > $FNAME
Sudo gzip $FNAME
juste au cas où vous utilisez un accès distant et que vous voulez vider toutes les données de la base de données, vous pouvez utiliser:
pg_dump -a -h your_Host -U your_user -W -Fc your_database > DATA.dump
il créera un dump avec toutes les données de la base de données et utilisera
pg_restore -a -h your_Host -U your_user -W -Fc your_database < DATA.dump
insérer les mêmes données dans votre base de données en considérant que vous avez la même structure