Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Transport de bases de données PostgreSQL entre des instances de base de données
En utilisant les bases de données transportables PostgreSQL pour Amazon RDS, vous pouvez déplacer une base de données PostgreSQL entre deux instances de base de données. Il s'agit d'un moyen très rapide de migrer de grandes bases de données entre différentes instances de base de données. Pour utiliser cette approche, vos instances de base de données doivent toutes deux exécuter la même version majeure de PostgreSQL.
Cette fonctionnalité nécessite que vous installiez l'extension pg_transport
sur les instances de base de données source et de destination. L'extension pg_transport
fournit un mécanisme de transport physique qui déplace les fichiers de base de données avec un traitement minimal. Ce mécanisme déplace les données beaucoup plus rapidement que les processus traditionnels de vidage et de chargement, avec moins de temps d'arrêt.
Note
Les bases de données transportables PostgreSQL sont disponibles dans RDS for PostgreSQL versions 10.10 et ultérieures, ansi que versions 11.5 et ultérieures.
Pour transporter une instance de base de données PostgreSQL d'une instance de base de données RDS for PostgreSQL à une autre, vous devez d'abord configurer les instances source et de destination, comme indiqué dans la section Configuration d'instances de base de données pour leur transport. Vous pouvez ensuite transporter la base de données à l'aide de la fonction décrite dans Transport d'une base de données PostgreSQL.
Rubriques
- Limites à l'utilisation de bases de données transportables PostgreSQL
- Configuration pour le transport d'une base de données PostgreSQL
- Transport d'une base de données PostgreSQL vers la destination depuis la source
- Que se passe-t-il durant le transport d'une base de données ?
- Référence des fonctions des base de données transportables
- Référence des paramètres des bases de données transportables
Limites à l'utilisation de bases de données transportables PostgreSQL
Les bases de données transportables présentent les limites suivantes :
Réplicas en lecture – Vous ne pouvez pas utiliser des bases de données transportables sur des réplicas en lecture ou des instances parentes de réplicas en lecture.
-
Types de colonne non pris en charge – Vous ne pouvez pas utiliser les types de données
reg
dans des tables de bases de données que vous souhaitez transporter avec cette méthode. Ces types dépendent des ID d'objet de catalogue système (OID), qui varient souvent durant le transport. -
Espaces de tables – Tous les objets de base de données sources doivent se trouver dans l'espace de table
pg_default
par défaut . -
Compatibilité – Les instances de base de données source et destination doivent exécuter la même version majeure de PostgreSQL.
-
Extensions : l'instance de base de données source ne peut avoir que
pg_transport
installé. -
Rôles et ACL – Les privilèges d'accès et les informations de propriété de la base de données source ne sont pas transportés vers la base de données de destination. Tous les objets de base de données sont créés par l'utilisateur de destination locale du transport et sont sa propriété.
Transports simultanés : une seule instance de base de données peut prendre en charge jusqu'à 32 transports simultanés, y compris les importations et les exportations, si les processus de travail ont été correctement configurés.
-
Uniquement RDS pour les instances de bases de données PostgreSQL : les bases de données transportables PostgreSQL ne sont prises en charge que sur les instances de base de données RDS for PostgreSQL. Vous ne pouvez pas l'utiliser avec des bases de données locales ou des bases de données exécutées sur Amazon EC2.
Configuration pour le transport d'une base de données PostgreSQL
Avant de commencer, vérifiez que vos instances de base de données RDS for PostgreSQL répondent aux exigences suivantes :
Les instances de base de données source et destination doivent exécuter la même version de PostgreSQL.
La base de données de destination ne peut pas avoir de base de données portant le même nom que la base de données source que vous souhaitez transporter.
Le compte que vous utilisez pour exécuter le transport doit avoir les privilèges
rds_superuser
sur les bases de données source et de destination.Le groupe de sécurité de l'instance de base de données source doit autoriser l'accès entrant depuis l'instance de base de données de destination. C'est peut-être déjà le cas si vos instances de base de données source et de destination se trouvent dans le VPC. Pour plus d’informations sur les groupes de sécurité, consultez Contrôle d'accès par groupe de sécurité.
Le transport de bases de données d'une instance de base de données source vers une instance de base de données de destination nécessite plusieurs modifications apportées au groupe de paramètres de base de données associé à chaque instance. Cela signifie que vous devez créer un groupe de paramètres de base de données personnalisé pour l'instance de base de données source et créer un groupe de paramètres de base de données personnalisé pour l'instance de base de données de destination.
Note
Si vos instances de base de données sont déjà configurées à l'aide de groupes de paramètres de base de données personnalisés, vous pouvez commencer par l'étape 2 de la procédure suivante.
Pour configurer les paramètres de groupe de base de données personnalisés pour le transport de bases de données
Pour les étapes suivantes, utilisez un compte doté des privilèges rds_superuser
.
Si les instances de base de données source et de destination utilisent un groupe de paramètres de base de données par défaut, vous devez créer un groupe de paramètres de base de données personnalisé en utilisant la version appropriée pour vos instances. Vous pouvez ainsi modifier les valeurs de plusieurs paramètres. Pour plus d’informations, consultez Utilisation des groupes de paramètres.
Dans le groupe de paramètres de base de données personnalisé, modifiez les valeurs des paramètres suivants :
shared_preload_libraries
: ajoutezpg_transport
à la liste des bibliothèques.pg_transport.num_workers
: la valeur par défaut est 3. Augmentez ou réduisez cette valeur au besoin pour votre base de données. Pour une base de données de 200 Go, nous recommandons de ne pas dépasser 8. N'oubliez pas que si vous augmentez la valeur par défaut de ce paramètre, vous devez également augmenter la valeur demax_worker_processes
.pg_transport.work_mem
: la valeur par défaut est 128 Mo ou 256 Mo, selon la version PostgreSQL. Le paramètre par défaut peut généralement rester inchangé.max_worker_processes
: la valeur de ce paramètre doit être définie à l'aide du calcul suivant :(3 * pg_transport.num_workers) + 9
Cette valeur est nécessaire au niveau de la destination pour gérer les divers processus employés en arrière-plan impliqués dans le transport. Pour en savoir plus sur
max_worker_processes,
, consultez Resource Consumption(Consommation des ressources) dans la documentation de PostgreSQL.
Pour de plus amples informations sur les paramètres
pg_transport
, veuillez consulter Référence des paramètres des bases de données transportables .Redémarrez l'instance de base de données source RDS for PostgreSQL et l'instance de destination pour que les paramètres prennent effet.
Connectez-vous à votre instance de base de données source RDS for PostgreSQL.
psql --host=
source-instance
.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordSupprimez les extensions externes du schéma public de l'instance de base de données. Seule l'extension
pg_transport
est autorisée pendant l'opération de transport réelle.Installez l'extension
pg_transport
comme suit :postgres=>
CREATE EXTENSION pg_transport;
CREATE EXTENSION
Connectez-vous à votre instance de base de données de destination RDS for PostgreSQL. Supprimez toutes les extensions externes, puis installez l'extension
pg_transport
.postgres=>
CREATE EXTENSION pg_transport;
CREATE EXTENSION
Transport d'une base de données PostgreSQL vers la destination depuis la source
Une fois terminé le processus décrit dans Configuration pour le transport d'une base de données PostgreSQL, vous pouvez démarrer le transport. Pour cela, exécutez la fonction transport.import_from_server
sur l'instance de base de données de destination. Dans la syntaxe suivante, vous trouverez les paramètres de la fonction.
SELECT transport.import_from_server( '
source-db-instance-endpoint
',source-db-instance-port
, 'source-db-instance-user
', 'source-user-password
', 'source-database-name
', 'destination-user-password
', false);
Le valeur false
illustrée dans l'exemple indique à la fonction qu'il ne s'agit pas d'un test. Pour tester la configuration de votre transport, vous pouvez spécifier true
pour dry_run
lorsque vous appelez la fonction, comme illustré ci-après :
postgres=>
SELECT transport.import_from_server( 'docs-lab-source-db.666666666666
aws-region
.rds.amazonaws.com', 5432, 'postgres', '********', 'labdb', '******', true);INFO: Starting dry-run of import of database "labdb". INFO: Created connections to remote database (took 0.03 seconds). INFO: Checked remote cluster compatibility (took 0.05 seconds). INFO: Dry-run complete (took 0.08 seconds total). import_from_server -------------------- (1 row)
Les lignes INFO sont affichées car le paramètre pg_transport.timing
est défini sur sa valeur par défaut, à savoir true
. Définissez dry_run
à la valeur false
lorsque vous exécutez la commande et que la base de données source est importée vers la destination, comme indiqué ci-dessous :
INFO: Starting import of database "labdb".
INFO: Created connections to remote database (took 0.02 seconds).
INFO: Marked remote database as read only (took 0.13 seconds).
INFO: Checked remote cluster compatibility (took 0.03 seconds).
INFO: Signaled creation of PITR blackout window (took 2.01 seconds).
INFO: Applied remote database schema pre-data (took 0.50 seconds).
INFO: Created connections to local cluster (took 0.01 seconds).
INFO: Locked down destination database (took 0.00 seconds).
INFO: Completed transfer of database files (took 0.24 seconds).
INFO: Completed clean up (took 1.02 seconds).
INFO: Physical transport complete (took 3.97 seconds total).
import_from_server
--------------------
(1 row)
Cette fonction nécessite que vous fournissiez les mots de passe utilisateur de la base de données. Nous vous recommandons donc de modifier les mots de passe des rôles utilisateur que vous avez utilisés une fois le transport terminé. Vous pouvez aussi utiliser des variables de liaison SQL pour créer des rôles utilisateur temporaires. Utilisez ces rôles temporaires pour le transport, puis supprimez-les une fois que vous n'en avez plus besoin.
Si votre transport n'est pas réussi, vous pouvez voir un message d'erreur similaire à ce qui suit :
pg_transport.num_workers=8 25% of files transported failed to download file data
Le message d'erreur « Impossible de télécharger les données du fichier » indique que le nombre de processus de travail n'est pas défini correctement pour la taille de la base de données. Vous devrez peut-être augmenter ou diminuer la valeur définie pour pg_transport.num_workers
. Chaque échec indique le pourcentage d'achèvement, afin que vous puissiez voir l'impact de vos modifications. Par exemple, la modification du paramètre de 8 à 4 dans un cas a entraîné les résultats suivants :
pg_transport.num_workers=4 75% of files transported failed to download file data
Gardez à l'esprit que le paramètre max_worker_processes
est également pris en compte pendant le processus de transport. Autrement dit, vous devrez peut-être modifier à la fois pg_transport.num_workers
et max_worker_processes
pour transporter correctement la base de données. L'exemple présenté a finalement fonctionné lorsque le pg_transport.num_workers
a été réglé sur 2 :
pg_transport.num_workers=2 100% of files transported
Pour plus d'informations sur la fonction transport.import_from_server
et ses paramètres, veuillez consulter Référence des fonctions des base de données transportables.
Que se passe-t-il durant le transport d'une base de données ?
La fonction de bases de données transportables PostgreSQL utilisent un modèle d'extraction pour importer la base de données à partir de l'instance de base de données source. La fonction transport.import_from_server
crée la base de données en transit sur l'instance de base de données de destination. La base de données en transit est inaccessible sur l'instance de base de données de destination pendant toute la durée du transport.
Lorsque le transport commence, toutes les sessions en cours sur la base de données source cessent. Les bases de données autres que la base de données source sur l'instance de base de données source ne sont pas affectées par le transport.
La base de données source est placée dans un mode lecture seule spécial. Lorsqu'elle est dans ce mode, vous pouvez vous connecter à la base de données source et exécuter des requêtes de lecture seule. Par contre, les requêtes d'écriture et certains autres types de commandes sont bloqués. Seule la base de données source qui fait l'objet du transport est affectée par ces restrictions.
Durant le transport, vous ne pouvez pas restaurer l'instance de base de données de destination à un instant dans le passé. En effet, le transport n'est pas transactionnel et n'utilise pas le journal write-ahead (WAL) PostgreSQL pour enregistrer les modifications. Si les sauvegardes automatiques sont activées pour l'instance de base de données de destination, une sauvegarde est automatiquement effectuée une fois le transport terminé. Les oint-in-time restaurations P sont disponibles pendant un certain temps après la fin de la sauvegarde.
En cas d'échec du transport, l'extension pg_transport
tente d'annuler toutes les modifications apportées aux instances de base de données source et de destination. Cela inclut la suppression de la base de données partiellement transportée sur la destination. Selon le type de défaillance, la base de données source peut continuer à rejeter les requêtes d'écriture. Si tel est le cas, utilisez la commande suivante pour autoriser les requêtes d'écriture.
ALTER DATABASE
db-name
SET default_transaction_read_only = false;
Référence des fonctions des base de données transportables
La fonction transport.import_from_server
transporte une base de données PostgreSQL en l'important d'une instance de base de données source vers une instance de base de données de destination. Elle effectue cette opération en utilisant un mécanisme de transport physique de connexion de base de données.
Avant de démarrer le transport, cette fonction vérifie que les instances de base de données source et de destination sont de la même version et sont compatibles avec la migration. Elle confirme également que l'instance de base de données de destination dispose de suffisamment d'espace pour la source.
Syntaxe
transport.import_from_server( host text, port int, username text, password text, database text, local_password text, dry_run bool )
Valeur renvoyée
Aucun.
Paramètres
Le tableau ci-dessous contient les descriptions des paramètres de la fonction transport.import_from_server
.
Paramètre | Description |
---|---|
host |
Point de terminaison de l'instance de base de données source. |
port |
Entier représentant le port de l'instance de base de données source. Les instances de base de données PostgreSQL utilisent souvent le port 5432. |
username |
Utilisateur de l'instance de base de données source. Cet utilisateur doit être membre du rôle |
password |
Mot de passe utilisateur de l'instance de base de données source. |
database |
Nom de la base de données à transporter à partir de l'instance de base de données source. |
local_password |
Mot de passe local de l'utilisateur actuel pour l'instance de base de données de destination. Cet utilisateur doit être membre du rôle |
dry_run |
Valeur booléenne facultative spécifiant si un essai est nécessaire. La valeur par défaut est dry_run sur true . |
Exemple
Pour obtenir un exemple, veuillez consulter Transport d'une base de données PostgreSQL vers la destination depuis la source.
Référence des paramètres des bases de données transportables
Plusieurs paramètres contrôlent le comportement de l'extension pg_transport
. Vous trouverez ci-dessous la description de ces paramètres.
pg_transport.num_workers
-
Le nombre d'unités de travail à utiliser pour le processus de transport. La valeur par défaut est 3. Les valeurs valides vont de 1 à 32. Même les transports de base de données les plus volumineux nécessitent généralement moins de 8 unités de travail. La valeur de ce paramètre sur l'instance de base de données de destination est utilisée par la destination et la source pendant le transport.
pg_transport.timing
-
Indique s'il faut signaler les informations de synchronisation pendant le transport. La valeur par défaut est
true
, ce qui signifie que les informations de synchronisation sont signalées. Nous vous recommandons de laisser ce paramètre défini surtrue
pour que vous puissiez suivre les progrès réalisés. Pour un exemple de sortie, veuillez consulter Transport d'une base de données PostgreSQL vers la destination depuis la source. pg_transport.work_mem
-
Quantité de mémoire maximale à allouer à chaque unité de travail. La valeur par défaut est 131 072 kilo-octets (Ko) ou 262 144 Ko (256 Mo), selon la version PostgreSQL. La valeur minimale est de 64 méga-octets (65 536 Ko). Les valeurs valides sont exprimées en kilo-octets (Ko) sous forme d'unités binaires de base 2, où 1 Ko = 1 024 octets.
Le transport peut utiliser moins de mémoire que spécifié dans ce paramètre. Même les transports de base de données volumineux nécessitent généralement moins de 256 Mo (262 144 Ko) de mémoire par unité de travail.