PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment travailler avec les bases de données PostgreSQL

Table des matières

Répertorier les bases de données
Vider une base de données
Vider toutes les bases de données
Vider les subventions
Supprimer ou supprimer une base de données
Supprimer une Grant
Restaurer une base de données
Restaurer Grant

PostgreSQL est un excellent moteur de base de données alternatif à MySQL ou MariaDB, mais la gestion de ces bases de données est très différente, en particulier pour les administrateurs système qui sont très habitués à utiliser MySQL depuis la ligne de commande ou PHPMyAdmin. De nombreux CMS et applications savent déjà comment interagir avec les bases de données PostgreSQL, mais comme MySQL, ils dépendent toujours de vous pour maintenir ces bases de données.

Pour cet article, nous supposerons que vous êtes connecté en SSH à votre serveur en tant qu'utilisateur "root" et que vous avez installé le serveur PostgreSQL avec la configuration par défaut, ce qui nécessite une connexion en tant qu'utilisateur "postgres". Par conséquent, la plupart des commandes prendront également l'option -U postgres. Ces commandes seront généralement identiques entre CentOS et Ubuntu dans la plupart des versions modernes, mais ont été testées principalement sur un serveur VPS CentOS 7 et un serveur Ubuntu 16.04 exécutant PostgreSQL 9.2.

La création de bases de données et de subventions est assez complexe, mais si vous utilisez cPanel, Plesk ou un autre panneau de contrôle prenant en charge l'intégration PostgreSQL, la configuration est simple. La création de ces bases de données et de ces subventions à partir de la ligne de commande n'entre pas dans le cadre de cet article particulier, nous supposerons donc également que vous avez déjà vos bases de données en cours d'exécution et en cours d'utilisation.

Répertorier les bases de données dans PostgreSQL

Il est utile de connaître les noms exacts des bases de données sur lesquelles vous travaillerez, ainsi que de faire une double vérification pour vous assurer que vous travaillez sur le bon serveur. Commençons par lister les bases de données PostgreSQL sur notre machine :
psql -l -U postgres

La sortie de cette commande est une table de noms de bases de données, de propriétaires et de privilèges d'accès. Nous utiliserons les données de la première colonne lors de la description des noms de base de données pour les futures commandes. Pour cet article, nous utiliserons une base de données appelée "database_name ”.

Si vous n'avez besoin que des noms de base de données, et aucune autre information, vous pouvez supprimer les informations en excès en effectuant une requête exacte pour les noms de base de données :
psql -U postgres -tA -c 'select datname from pg_database;'

Cette commande exécute une commande (décrite par le -c flag) de sélection du datname colonne de la pg_database tableau global. Le -t flag répertorie uniquement les tuples (lignes de résultats) et masque les descripteurs en excès comme l'en-tête et le nombre de résultats, et le -A flag supprimera l'alignement, imprimant une base de données par ligne sans caractères devant ou derrière les noms. La sortie de cette commande est particulièrement utile pour créer des boucles pour les vidages de base de données.

Vider une base de données

La commande dump prendra une copie complète d'une base de données, y compris toutes les tables, schémas et données, et la stockera dans un seul fichier compressé :
pg_dump -c -Fc -U postgres database_name > database_name.psql

Il y a quelques drapeaux importants pour cette commande. -c , ou –propre , dit pg_dump pour ajouter des instructions DROP à la sortie, et -Fc , ou –format=personnalisé , compresse et organise la sortie à utiliser avec pg_restore plus tard. Le format personnalisé offre la plus grande flexibilité et stocke également avantageusement la sauvegarde dans un seul fichier.

Vider toutes les bases de données

Il serait probablement préférable de faire ressortir chacune des bases de données dans son propre fichier en exécutant la commande ci-dessus plusieurs fois. Nous ferons référence à notre deuxième commande de liste, en supprimant quelques bases de données inutiles, pour faire nos vidages individuels.
for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
echo $db
pg_dump -c -Fc -U postgres $db > $db.psql
done

Cette boucle for transmettra une liste de toutes les bases de données, autres que les modèles par défaut et la base de données postgres, dans le pg_dump commande pour créer un .psql fichier pour chacun dans le répertoire courant.

Remarque :il est également possible d'effectuer un vidage de toutes les bases de données dans un seul fichier, bien qu'avec de grands ensembles de données, cela puisse devenir lourd et difficile à restaurer. Par conséquent, je ne recommande pas cette méthode, même si elle est moins complexe et peut fonctionner dans certaines situations.

pg_dumpall --clean -U postgres > pg.all.psql

Subventions de vidage

Les octrois sont stockés dans le schéma PostgreSQL. Vous pouvez vider le schéma, obtenant ainsi toutes les autorisations disponibles pour le système, à l'aide de la commande pg_dump :
pg_dumpall -U postgres -s > pg.schema.psql

Cela videra non seulement les subventions, mais également le reste du schéma du serveur, y compris les instructions de création de base de données et de table, la propriété et l'appartenance au rôle, et l'allocation ACL - en gros, tout sauf les données.

Si vous n'avez besoin que d'utilisateurs (rôles) et d'autorisations, vous pouvez les collecter à l'aide de cette commande :
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql

Cela exploite le vidage de schéma complet, mais ne prend que les instructions de création de rôle et les instructions d'octroi/révocation pour assembler les utilisateurs et les autorisations.

Supprimer ou supprimer une base de données

Pour détruire une base de données, la syntaxe est très simple. Soyez prudent lorsque vous tapez cette commande, car elle ne vous demande pas de confirmer !
psql -U postgres -c ‘drop database database_name’

Si la base de données existe, elle ne le sera plus. Il existe également un wrapper de ligne de commande pour cette même tâche :
dropdb -U postgres database_name

Supprimer une subvention

Les subventions sont retirées aux utilisateurs en les révoquant. Il est important de savoir d'abord de quelles autorisations dispose un utilisateur spécifique, alors recherchons-les en vidant le schéma et en trouvant les lignes liées à notre utilisateur.
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user

Dans mon cas, il y a une subvention qui ressemble à ceci :
GRANT ALL ON DATABASE database_name TO database_user;

Pour lutter contre cela, nous allons révoquer le même descripteur :
psql -U postgres -c ‘revoke all on database database_name from database_user;’

Remarque :notez les légères modifications, GRANT a été remplacé par REVOKE et TO a été remplacé par FROM. Cette commande est entourée de guillemets simples et transmise à psql avec l'indicateur -c pour exécuter la commande dans PostgreSQL.
Cela remplacera l'instruction GRANT d'origine par un REVOKE dans le schéma. L'exécution à nouveau de la première commande de cette section affiche désormais uniquement la ligne que nous venons de passer :
REVOKE ALL ON DATABASE database_name FROM database_user;

Restaurer une base de données

Pour les bases de données qui ont été vidées à l'aide de la méthode pg_dump utilisée dans cet article, nous pouvons restaurer cette base de données entière à l'aide de cette commande :
pg_restore -U postgres -c -C -O -d database_name database_name.psql

Encore quelques drapeaux nécessaires ici ! -c ou –propre , comme auparavant, supprime les objets de la base de données avant d'écrire à partir du fichier dans PostgreSQL. Nous l'ajoutons juste au cas où il n'aurait pas été utilisé pour la commande dump. -C , ou –créer , créera la base de données nom_base de données lors de la restauration si elle n'existe pas. Si la base de données existe déjà, le -c flag le détruira avant -C le recrée. Ensuite, il y a -O , ou –pas de propriétaire , qui supprime le propriétaire de la base de données. Cela permet à une sauvegarde de n'importe quelle source d'être changée pour le propriétaire de l'utilisateur effectuant la restauration, qui dans notre cas est postgres. -d database_name décrit le nom de la base de données vers laquelle vous allez restaurer. Il peut s'agir d'un nom différent de celui à partir duquel la sauvegarde a été créée, si nécessaire. Le dernier argument est le nom de notre fichier de sauvegarde, database_name.psql .

Restaurer une subvention

Étant donné que toutes les autorisations sont stockées dans notre fichier pg.grants.psql, nous devons sélectionner uniquement l'utilisateur que nous devons restaurer. Dans notre cas, nous allons restaurer database_user :
grep database_user pg.grants.psql | psql -U postgres

Étant donné que le fichier pg.grants.psql a des rôles et des autorisations, cette commande recréera l'utilisateur avec ses privilèges et son mot de passe d'origine, puis lui accordera l'accès aux bases de données et schémas requis.