Tous les produits
Search
Centre de documentation

DataWorks:Source de données PostgreSQL

Dernière mise à jour :Aug 10, 2026

La source de données PostgreSQL offre un canal bidirectionnel pour la lecture et l'écriture de données depuis et vers PostgreSQL. Vous pouvez configurer des tâches de synchronisation de données en mode assistant ou en mode script. Cette rubrique décrit la prise en charge de la synchronisation des données PostgreSQL par DataWorks.

Versions prises en charge

Vous pouvez configurer des sources de données pour les versions 10, 11, 12, 13, 14, 15 et 16.4 de PostgreSQL. Pour vérifier la version de votre base de données PostgreSQL, exécutez l'instruction suivante.

SHOW SERVER_VERSION;

Limites

Lecture et écriture hors ligne

Remarque

Vous pouvez lire des données à partir de vues.

  • La source de données PostgreSQL prend en charge l'authentification par mot de passe, y compris la méthode SCRAM-SHA-256. Si vous modifiez le mot de passe ou la méthode d'authentification dans la base de données PostgreSQL, mettez à jour la configuration de la source de données, testez à nouveau la connexion et exécutez manuellement les tâches associées pour vérifier les modifications.

  • PostgreSQL

  • Si un nom de table ou de colonne dans PostgreSQL commence par un chiffre, est sensible à la casse ou contient un trait d'union (-), entourez-le de guillemets doubles (""). Sinon, le plug-in PostgreSQL ne pourra ni lire ni écrire de données. Dans les plug-ins PostgreSQL Reader et Writer, les guillemets doubles ("") constituent un mot clé JSON. Par conséquent, échappez les guillemets doubles avec une barre oblique inverse (\). Par exemple, si une table est nommée 123Test, le nom échappé est \"123Test\".

    Remarque
    • Les guillemets doubles ouvrants et fermants doivent tous deux être échappés avec une barre oblique inverse (\).

    • Le mode assistant ne prend pas en charge l'échappement. Passez en mode script pour échapper les caractères.

    Le code suivant illustre un exemple d'échappement des caractères en mode script.

    "parameter": {
        "datasource": "abc",
        "column": [
            "id",
            "\"123Test\"", //Add escape characters
    ],
    "where": "",
    "splitPk": "id",
    "table": "public.wpw_test"
    },
  • La mise à jour des données dans une source de données PostgreSQL basée sur un index unique n'est pas prise en charge. Pour mettre à jour des données, écrivez-les d'abord dans une table temporaire, puis utilisez l'opération RENAME.

Lecture en temps réel

Les limites suivantes s'appliquent aux tâches de synchronisation en temps réel dans Data Integration :

  • Data Integration offre une prise en charge spéciale pour ADD COLUMN :

    • Contrainte : Vous ne pouvez pas combiner une opération ADD COLUMN avec d'autres opérations ADD COLUMN, DROP COLUMN ou d'autres instructions DDL dans une seule transaction.

      Important

      Si vous utilisez ADD COLUMN avec d'autres opérations, telles que DROP COLUMN、RENAME COLUMN ou d'autres opérations ALTER COLUMN, la tâche de synchronisation des données risque de ne pas s'exécuter correctement.

    • Limitation : Les opérations DDL autres que ADD COLUMN ne sont pas reconnues.

  • ALTER TABLE/CREATE TABLE n'est pas pris en charge.

  • La réplication des tables TEMPORARY, UNLOGGED et Hyper n'est pas prise en charge. PostgreSQL ne fournit aucun mécanisme permettant de s'abonner à l'analyse des journaux WAL pour ces types de tables.

  • La réplication des Sequences (serial/bigserial/identity) n'est pas prise en charge.

  • L'opération TRUNCATE n'est pas prise en charge.

  • La réplication d'objets volumineux (Bytea) n'est pas prise en charge.

  • La réplication des vues, des vues matérialisées et des tables étrangères n'est pas prise en charge.

  • Lorsque PostgreSQL est utilisé comme source pour la synchronisation en temps réel sur une seule table ou sur toute la base de données, seules les tables pour lesquelles le compte dispose des autorisations de propriétaire peuvent être synchronisées.

Types de colonnes pris en charge

La plupart des types de données PostgreSQL sont pris en charge. Toutefois, certains types ne sont pas pris en charge pour les opérations de lecture et d'écriture par lots. Vérifiez vos types de données avant de poursuivre.

Le tableau suivant répertorie les mappages de conversion de type pour PostgreSQL.

|
**Catégorie de type**
|
**Type de données PostgreSQL**
| | --- | --- | |
Entier
|
BIGINT, BIGSERIAL, INTEGER, SMALLINT et SERIAL
| |
Virgule flottante
|
DOUBLE PRECISION, MONEY, NUMERIC et REAL
| |
Chaîne
|
VARCHAR, CHAR, TEXT, BIT et INET
| |
Date et heure
|
DATE, TIME et TIMESTAMP
| |
Booléen
|
BOOL
| |
Binaire
|
BYTEA
|
Remarque
  • Les types de colonnes autres que ceux répertoriés ci-dessus ne sont pas pris en charge.

  • Dans PostgreSQL Reader, convertissez les types MONEY, INET et BIT à l'aide d'une syntaxe similaire à a_inet::varchar.





























Préparatifs avant la synchronisation des données

Avant de synchroniser des données dans DataWorks, préparez l'environnement PostgreSQL comme décrit dans cette section afin de garantir que les tâches de synchronisation des données PostgreSQL puissent être configurées et exécutées correctement dans DataWorks. Les sections suivantes décrivent les étapes de préparation pour la synchronisation PostgreSQL.

Préparation 1 : Créer un compte et configurer les autorisations

Prévoyez un compte de connexion à la base de données pour les opérations ultérieures. Ce compte doit disposer des autorisations REPLICATION、 LOGIN sur la base de données.

Remarque

La synchronisation en temps réel prend uniquement en charge le mécanisme de réplication logique. La réplication logique utilise un modèle de publication et d'abonnement dans lequel un ou plusieurs abonnés s'abonnent à une ou plusieurs publications sur un nœud éditeur. Les abonnés extraient les données des publications auxquelles ils sont abonnés.

La réplication logique d'une table commence généralement par la prise d'un instantané des données sur la base de données éditrice et leur copie vers l'abonné. Une fois l'instantané terminé, les modifications apportées à l'éditeur sont envoyées à l'abonné en temps réel.

  1. Créez un compte.

    Pour plus d'informations, consultez Créer un compte.

  2. Configurez les autorisations.

    Vérifiez si le compte dispose de l'autorisation replication.

    select userepl from pg_user where usename='xxx'

    Le résultat attendu est True. Si le résultat est False, le compte ne dispose pas de l'autorisation. Exécutez l'instruction suivante pour accorder l'autorisation.

    ALTER USER <user> REPLICATION;

Préparation 2 : Vérifier si une base de données de secours est prise en charge

SELECT pg_is_in_recovery()

Seule la base de données principale est prise en charge. Le résultat attendu est False. Si le résultat est True, la base de données est une base de données de secours. La synchronisation en temps réel ne prend pas en charge les bases de données de secours. Modifiez la configuration de la source de données pour qu'elle pointe vers la base de données principale. Pour plus d'informations, consultez Configurer la source de données.

Préparation 3 : Vérifier si wal_level est défini sur logical

show wal_level

wal_level spécifie le niveau de wal_log. Le résultat attendu est logical. Dans le cas contraire, le mécanisme de réplication logique n'est pas pris en charge.

Préparation 4 : Vérifier si un processus wal_sender peut être démarré

-- Query max_wal_senders show max_wal_senders; -- Query the number of pg_stat_replication entries select count(*) from pg_stat_replication

Si max_wal_senders n'est pas vide et que sa valeur est supérieure au nombre d'entrées max_wal_senders dans pg_stat_replication, des processus wal_sender inactifs sont disponibles. La base de données PostgreSQL démarre des processus wal_sender pour que le programme de synchronisation des données envoie les journaux aux abonnés.

Pour chaque table à synchroniser, exécutez manuellement l'instruction ALTER TABLE [tableName] REPLICA IDENTITY FULL afin d'accorder les autorisations requises. Dans le cas contraire, la tâche de synchronisation en temps réel échouera.

Après le démarrage d'une tâche de synchronisation en temps réel PostgreSQL, des slots et des publications sont automatiquement créés dans la base de données. Le format du nom du slot est di_slot_ + ID de la tâche de synchronisation et le format du nom de la publication est di_pub_ + ID de la solution. Après l'arrêt ou le retrait du déploiement de la tâche de synchronisation en temps réel, supprimez manuellement les slots et les publications. Dans le cas contraire, les fichiers WAL PostgreSQL risquent de croître continuellement. Recherchez l'ID de la tâche de synchronisation dans la liste des tâches de DataWorks Data Integration, trouvez la tâche correspondante et vérifiez son statut ainsi que ses configurations de planification pour confirmer si la tâche a été arrêtée ou retirée du déploiement.

Ajouter une source de données

Avant de développer une tâche de synchronisation dans DataWorks, ajoutez la source de données requise à DataWorks en suivant les instructions fournies dans Configuration de la source de données. Consultez les descriptions des paramètres dans la console DataWorks pour comprendre la signification des paramètres lors de l'ajout d'une source de données.

Si l'authentification SSL est activée pour votre base de données PostgreSQL, activez également l'authentification SSL lors de l'ajout d'une source de données PostgreSQL dans DataWorks. Pour plus d'informations, consultez Ajouter une authentification SSL pour une source de données PostgreSQL.

Développement de tâches de synchronisation de données : guide du processus de synchronisation PostgreSQL

Pour obtenir des informations sur le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.

Guide de configuration des tâches de synchronisation par lots sur une seule table

Guide de configuration des tâches de synchronisation pour la lecture par lots sur toute la base de données et la lecture en temps réel sur toute la base de données

Pour plus d'informations sur la procédure, consultez Configurer une tâche de synchronisation par lots sur toute la base de données et Configurer une tâche de synchronisation en temps réel sur toute la base de données.

FAQ

  • Problème de récupération des données de synchronisation principal/secours

    Le problème de synchronisation principal/secours fait référence à un scénario dans lequel PostgreSQL utilise la reprise après sinistre principal/secours et la base de données de secours récupère continuellement les données de la base de données principale. En raison d'un décalage temporel entre la synchronisation des données principales et secondaires, notamment dans certaines situations telles que la latence réseau, les données récupérées sur la base de données de secours peuvent différer considérablement de celles de la base de données principale. Les données synchronisées à partir de la base de données de secours ne constituent pas un instantané complet de l'heure actuelle.

  • Contrainte de cohérence

    PostgreSQL est un système SGBDR qui fournit une interface de requête de données fortement cohérente. Par exemple, lorsqu'une tâche de synchronisation est en cours d'exécution et que d'autres rédacteurs écrivent des données dans la base de données, PostgreSQL Reader ne récupère pas les données nouvellement écrites en raison de la fonctionnalité d'instantané de la base de données.

    Ce qui précède décrit les caractéristiques de cohérence de la synchronisation des données de PostgreSQL Reader en mode monothread. PostgreSQL Reader peut effectuer une extraction de données concurrente selon votre configuration, de sorte qu'une cohérence stricte des données ne peut pas être garantie.

    Après que PostgreSQL Reader a fractionné les données en fonction de splitPk, plusieurs tâches concurrentes sont démarrées séquentiellement pour terminer la synchronisation des données. Ces tâches concurrentes n'appartiennent pas à la même transaction de lecture et il existe des intervalles de temps entre elles. Par conséquent, les données ne constituent pas un instantané de données complet et cohérent.

    Les instantanés cohérents pour les opérations multithread sont techniquement irréalisables. Cela ne peut être résolu que d'un point de vue ingénierie. Les solutions suivantes impliquent des compromis. Choisissez en fonction de votre situation.

    • Utilisez la synchronisation monothread, ce qui signifie qu'il n'y a pas de fragmentation des données. L'inconvénient est une vitesse plus lente, mais cela garantit la cohérence.

    • Arrêtez les autres rédacteurs de données pour garantir que les données actuelles sont statiques, par exemple en verrouillant les tables ou en arrêtant la synchronisation de la base de données de secours. L'inconvénient est un impact potentiel sur les activités en ligne.

  • Problème d'encodage de la base de données

    PostgreSQL prend uniquement en charge les encodages simplifiés chinois EUC_CN et UTF-8 côté serveur. PostgreSQL Reader utilise JDBC pour l'extraction des données au niveau sous-jacent. JDBC prend nativement en charge divers encodages et effectue la conversion d'encodage au niveau sous-jacent. Par conséquent, PostgreSQL Reader ne nécessite pas que vous spécifiiez un encodage et peut détecter et convertir automatiquement les encodages.

    Si l'encodage d'écriture sous-jacent de PostgreSQL est incohérent avec son encodage configuré, PostgreSQL Reader ne peut pas détecter ce problème et ne peut fournir aucune solution. Les données exportées peuvent contenir des caractères illisibles.

  • Méthodes de synchronisation des données incrémentielles

    PostgreSQL Reader utilise des instructions SELECT JDBC pour l'extraction des données. Par conséquent, utilisez SELECT…WHERE… pour extraire des données incrémentielles. Les méthodes sont les suivantes :

    • Lorsqu'une application en ligne écrit des données dans la base de données, elle renseigne le champ de modification avec l'horodatage de modification, y compris les insertions, les mises à jour et les suppressions (suppressions logiques). Pour de telles applications, PostgreSQL Reader doit uniquement ajouter l'horodatage de la phase de synchronisation précédente dans la condition where.

    • Pour les nouvelles données séquentielles ajoutées, PostgreSQL Reader doit uniquement ajouter l'ID auto-incrémenté maximal de la phase précédente dans la condition where.

    S'il n'existe aucune colonne permettant de distinguer les nouvelles données des données modifiées au niveau métier, PostgreSQL Reader ne peut pas effectuer de synchronisation de données incrémentielles et ne peut synchroniser que les données complètes.

  • Sécurité SQL

    PostgreSQL Reader fournit l'instruction querySql pour vous permettre d'implémenter des instructions SELECT personnalisées. PostgreSQL Reader n'effectue aucune validation de sécurité sur l'instruction querySql.

  • Si vous ne pouvez pas sélectionner le nom de table souhaité lors de la configuration d'une tâche de synchronisation, procédez au dépannage comme suit :

    • Vérifiez si la source de données est connectée.

    • Vérifiez si le compte PostgreSQL utilisé pour la source de données dispose des autorisations de table requises.

    • Si la base de données contient un grand nombre de tables, nous vous recommandons de rechercher directement en saisissant le nom de la table.

  • PostgreSQL ne prend pas en charge la synchronisation de tables fragmentées. Si vous avez un grand nombre de tables PostgreSQL à synchroniser, nous vous recommandons d'utiliser une tâche de synchronisation sur toute la base de données. Pour plus d'informations, consultez Guide de configuration des tâches de synchronisation sur toute la base de données.

Annexe 1 : Démonstration de script et description des paramètres

Configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code

Si vous souhaitez configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code, configurez les paramètres associés dans le script conformément aux exigences de format de script unifié. Pour plus d'informations, consultez Configuration en mode script. Les informations suivantes décrivent les paramètres que vous devez configurer pour les sources de données lorsque vous configurez une tâche de synchronisation par lots à l'aide de l'éditeur de code.

Démonstration de script Reader

Pour configurer un job qui extrait des données d'une base de données PostgreSQL, utilisez le mode script. Pour plus d'informations, consultez Configurer une tâche de synchronisation par lots en mode script.

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"postgresql",// The plugin name. "parameter":{ "datasource":"",// The data source. "column":[// The columns. "col1", "col2" ], "where":"",// The filter condition. "splitPk":"",// The column used as the split key for data sharding. Data synchronization starts concurrent tasks for data synchronization. "table":""// The table name. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true, // A value of false for throttle indicates that throttling is disabled and the mbps parameter does not take effect. A value of true indicates that throttling is enabled. "concurrent":1, // The concurrency of the job. "mbps":"12"// The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Paramètres du script Reader

Paramètre

Description

Obligatoire

Valeur par défaut

datasource

Nom de la source de données. Le mode script vous permet d'ajouter des sources de données. La valeur de ce paramètre doit être identique au nom de la source de données que vous avez ajoutée.

Oui

N/A

table

Nom de la table à partir de laquelle vous souhaitez synchroniser les données.

Oui

N/A

column

Ensemble des noms de colonnes à synchroniser dans la table configurée, décrit dans un tableau JSON. Par défaut, toutes les colonnes sont utilisées, par exemple [*].

  • L'élagage des colonnes est pris en charge, ce qui signifie que vous pouvez sélectionner des colonnes spécifiques à synchroniser.

  • Le réordonnancement des colonnes est pris en charge, ce qui signifie que les colonnes peuvent être synchronisées dans un ordre différent du schéma de la table.

  • Les constantes sont prises en charge. Vous devez respecter le format de syntaxe SQL MySQL, par exemple ["id", "table","1", "'mingya.wmy'", "'null'", "to_char(a+1)", "2,3" , "true"] .

    • id est un nom de colonne régulier.

    • table est un nom de colonne contenant un mot réservé.

    • 1 est une constante entière.

    • 'mingya.wmy' est une constante de chaîne (une paire de guillemets simples est requise).

    • 'null' est une chaîne.

    • to_char(a+1) est une fonction qui calcule la longueur de la chaîne.

    • 2,3 est un nombre à virgule flottante.

    • true est une valeur booléenne.

  • column doit spécifier explicitement l'ensemble des colonnes à synchroniser et ne peut pas être laissé vide.

Oui

N/A

splitFactor

Facteur de division. Vous pouvez configurer le nombre de divisions de données. Si plusieurs threads concurrents sont configurés, les données sont divisées en concurrence × splitFactor parties. Par exemple, si la concurrence est de 5 et splitFactor de 5, les données sont divisées en 5 × 5 = 25 parties et exécutées sur 5 threads concurrents.

Remarque

Plage de valeurs recommandée : 1 à 100. Des valeurs excessivement élevées peuvent provoquer des erreurs de dépassement de mémoire (OOM).

Non

5

splitPk

Lorsque PostgreSQL Reader extrait des données, si vous spécifiez splitPk, la colonne représentée par splitPk est utilisée pour le partitionnement des données. La synchronisation des données démarre des tâches concurrentes pour améliorer les performances de synchronisation :

  • Nous vous recommandons d'utiliser la clé primaire de la table pour splitPk, car les clés primaires sont généralement distribuées de manière uniforme, ce qui réduit le risque de points chauds de données dans les fragments résultants.

  • splitPk prend uniquement en charge le partitionnement des données entières. Les types chaîne, virgule flottante, date et autres ne sont pas pris en charge. Si vous spécifiez un type non pris en charge, la fonctionnalité splitPk est ignorée et un seul canal est utilisé pour la synchronisation.

  • Si splitPk n'est pas spécifié, y compris si splitPk n'est pas fourni ou si la valeur splitPk est laissée vide, la synchronisation des données utilise un seul canal pour synchroniser les données de la table.

Non

N/A

where

Condition de filtre. PostgreSQL Reader concatène le SQL en fonction des conditions column, table et where spécifiées, et extrait les données en fonction du SQL. Par exemple, lors des tests, vous pouvez utiliser la condition where pour spécifier un scénario métier. Généralement, les données du jour en cours sont synchronisées. Vous pouvez spécifier la condition where comme id>2 and sex=1 :

  • La condition where peut être utilisée efficacement pour la synchronisation incrémentielle des données.

  • Si la condition where n'est pas configurée ou est laissée vide, la synchronisation des données de la table complète est effectuée.

Non

N/A

querySql (mode avancé, non disponible en mode assistant)

Dans certains scénarios métier, la configuration where est insuffisante pour décrire les conditions de filtre. Utilisez ce paramètre pour définir un SQL de filtre personnalisé. Lorsque ce paramètre est configuré, le système de synchronisation des données ignore les configurations de tables, de colonnes et de splitPk, et utilise directement le contenu de ce paramètre pour filtrer les données. Par exemple, pour synchroniser des données après une jointure multi-tables, utilisez select a,b from table_a join table_b on table_a.id = table_b.id. Lorsque vous configurez querySql, PostgreSQL Reader ignore les configurations de table, de colonne et de where.

Non

N/A

fetchSize

Ce paramètre spécifie le nombre d'enregistrements extraits par lot entre le plug-in et le serveur de base de données. Cette valeur détermine le nombre d'interactions réseau entre Data Integration et le serveur, et peut améliorer considérablement les performances d'extraction des données.

Remarque

Une valeur fetchSize trop élevée (>2048) peut entraîner un dépassement de mémoire (OOM) du processus de synchronisation des données.

Non

512

Démonstration de script Writer

Voici un exemple de configuration de script. Pour plus d'informations, consultez les descriptions des paramètres ci-dessus.

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"postgresql",// The plugin name. "parameter":{ "datasource":"",// The data source. "column":[// The columns. "col1", "col2" ], "table":"",// The table name. "preSql":[],// The SQL statements executed before the data synchronization task. "postSql":[],// The SQL statements executed after the data synchronization task. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// A value of false for throttle indicates that throttling is disabled and the mbps parameter does not take effect. A value of true indicates that throttling is enabled. "concurrent":1, // The concurrency of the job. "mbps":"12"// The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Paramètres du script Writer

Paramètre

Description

Obligatoire

Valeur par défaut

datasource

Nom de la source de données. Le mode script vous permet d'ajouter des sources de données. La valeur de ce paramètre doit être identique au nom de la source de données que vous avez ajoutée.

Oui

N/A

table

Nom de la table vers laquelle vous souhaitez synchroniser les données.

Oui

N/A

writeMode

Mode d'écriture. Actuellement, les modes insert et copy sont pris en charge :

  • insert : Exécute l'instruction PostgreSQL insert into...values... pour écrire des données dans PostgreSQL. En cas de conflit de clé primaire ou d'index unique, l'enregistrement à synchroniser devient une donnée erronée. Nous vous recommandons d'utiliser d'abord le mode insert.

  • copy : PostgreSQL fournit la commande copy pour copier des données entre des tables et des fichiers (sortie standard, entrée standard). Data Integration prend en charge l'utilisation de copy from pour charger des données dans des tables. Nous vous recommandons d'essayer ce mode uniquement en cas de problèmes de performances.

Non

insert

column

Colonnes vers lesquelles les données sont écrites dans la table de destination, séparées par des virgules. Par exemple, "column":["id","name","age"]. Pour écrire des données dans toutes les colonnes séquentiellement, utilisez (), par exemple "column":[""].

Oui

N/A

preSql

Instructions SQL à exécuter avant l'exécution de la tâche de synchronisation des données. Actuellement, le mode assistant n'autorise qu'une seule instruction SQL, tandis que le mode script prend en charge plusieurs instructions SQL, par exemple pour effacer les anciennes données.

Non

N/A

postSql

Instructions SQL à exécuter après l'exécution de la tâche de synchronisation des données. Actuellement, le mode assistant n'autorise qu'une seule instruction SQL, tandis que le mode script prend en charge plusieurs instructions SQL, par exemple pour ajouter un horodatage.

Non

N/A

batchSize

Nombre d'enregistrements soumis par lot. Cette valeur peut réduire considérablement le nombre d'interactions réseau entre Data Integration et PostgreSQL, et améliorer le débit global. Toutefois, si cette valeur est trop élevée, le processus Data Integration risque de manquer de mémoire (OOM).

Non

1 024

pgType

Configuration de conversion pour les types spécifiques à PostgreSQL. Les types pris en charge incluent bigint[], double[], text[], Jsonb et JSON. Voici un exemple de configuration.

{
    "job":
    {
        "content":
        [{
            "reader": {...},
            "writer":
            {
                "parameter":
                {
                    "column":
                    [
                        // Destination table field list
                        "bigint_arr",
                        "double_arr",
                        "text_arr",
                        "jsonb_obj",
                        "json_obj"
                    ],
                    "pgType":
                    {
                        // Special type settings. The key is the field name of the destination table, and the value is the field type.
                        "bigint_arr": "bigint[]",
                        "double_arr": "double[]",
                        "text_arr": "text[]",
                        "jsonb_obj": "jsonb",
                        "json_obj": "json"
                    }

                }
            }
        }]
    }
}

Non

N/A

Annexe 2 : Ajouter une authentification SSL pour une source de données PostgreSQL

Description des fichiers d'authentification SSL PostgreSQL

Lorsque vous créez ou modifiez une connexion de source de données PostgreSQL dans DataWorks, vous pouvez configurer l'authentification SSL. Les paramètres de configuration de l'authentification SSL sont décrits ci-dessous.

Base de données PostgreSQL

Configuration de la source de données PostgreSQL DataWorks

Chiffrement de liaison SSL

Chiffrement client

Configuration ACL

Élément de configuration

Description

Activé

Désactivé

N/A

Fichier de certificat Truststore

Facultatif. Le client utilise ce certificat pour authentifier le serveur.

  • Non configuré : Une connexion régulière est utilisée.

  • Configuré : Une connexion chiffrée SSL est utilisée.

Activé

Configuration ACL définie sur prefer

  • Fichier de certificat Keystore

  • Fichier de clé privée

  • Mot de passe de la clé privée

Le Fichier de certificat Keystore et le Fichier de clé privée sont tous deux facultatifs. Lorsque la Configuration ACL est définie sur prefer, le serveur n'impose pas la vérification du certificat client.

  • Si le Fichier de clé privée n'est pas chiffré, une connexion chiffrée SSL est utilisée pour se connecter à la base de données et le fichier de clé privée est vérifié.

  • Si le Fichier de clé privée est chiffré, vous devez configurer le Mot de passe de la clé privée pour vérifier correctement le Fichier de clé privée et établir la connexion.

Configuration ACL définie sur verify-ca

  • Fichier de certificat Keystore : Obligatoire. Il s'agit du certificat CA client utilisé par le client pour prouver son identité au serveur.

  • Fichier de clé privée : Obligatoire. Le client détient ce fichier de clé privée, qui n'est pas partagé publiquement. Il est utilisé avec le Fichier de certificat Keystore téléchargé sur le serveur pour l'authentification d'identité.

  • Mot de passe de la clé privée : Facultatif. Si le fichier de clé privée est protégé par un mot de passe, vous devez fournir le mot de passe de la clé privée. Dans le cas contraire, vous pouvez le laisser vide.

Remarque
  • Lorsque la configuration ACL est définie sur prefer, le contenu du client n'est pas imposé pour la vérification.

    • Si aucun fichier n'est configuré pour l'authentification SSL, une connexion régulière est utilisée.

    • Si des fichiers d'authentification sont ajoutés pour l'authentification SSL, reportez-vous aux descriptions correspondantes dans le tableau ci-dessus.

  • Lorsque la configuration ACL est définie sur verify-ca, configurez le Fichier de certificat Keystore, le Fichier de clé privée et le Mot de passe de la clé privée pour créer la source de données.

Obtenir les fichiers d'authentification SSL PostgreSQL

Cette section utilise une instance ApsaraDB RDS for PostgreSQL comme exemple pour générer des certificats d'authentification SSL.

  1. Obtenez le Fichier de certificat Truststore.

    Pour plus d'informations sur l'obtention du Fichier de certificat Truststore, consultez Configurer une connexion chiffrée SSL.

    1. Accédez à la liste des instances RDS, cliquez sur l'instance RDS dans la région correspondante, puis cliquez sur l'ID de l'instance cible pour accéder à la page des détails de l'instance.

    2. Sélectionnez la chaîne de connexion que vous souhaitez protéger.

      1. Dans le volet de navigation de gauche, cliquez sur Data Security.

      2. Cliquez sur l'onglet SSL.

      3. Cliquez sur Use Cloud Certificate.

      4. Dans la ligne Configure Database Certificate (Prevent Database Spoofing), cliquez sur Modify.

      5. Dans la boîte de dialogue Select Connection String to Protect, sélectionnez la chaîne de connexion cible (par exemple, l'adresse du réseau interne).

      6. Cliquez sur OK.

    Remarque
    • Si le point de terminaison public est activé, les points de terminaison internes et publics sont affichés. Un certificat cloud ne peut protéger qu'un seul point de terminaison. Étant donné que le point de terminaison interne est relativement plus sécurisé, nous vous recommandons de protéger le point de terminaison public. Pour plus d'informations sur la façon de visualiser les points de terminaison internes et publics, consultez Afficher les points de terminaison internes et publics.

    • Si vous devez protéger à la fois les points de terminaison internes et publics, consultez Configurer un certificat personnalisé.

    • Après avoir configuré le certificat cloud, le Running Status de l'instance passe à Modifying SSL. Cet état dure environ trois minutes. Attendez que l'état d'exécution passe à Running avant de poursuivre.

    c. Cliquez sur Download CA Certificate pour obtenir le fichier Truststore certificate.

    Le package de certificats CA téléchargé contient trois fichiers. Lorsque vous configurez la source de données PostgreSQL dans DataWorks, téléchargez le fichier avec l'extension .pem ou le fichier avec l'extension .p7b dans l'élément de configuration Truststore certificate file.

  2. Obtenez et configurez le Fichier de certificat Keystore, le Fichier de clé privée et le Mot de passe de la clé privée.

    Prérequis : Vous avez terminé la configuration d'une connexion chiffrée SSL ou la configuration d'un certificat personnalisé, et vous disposez de l'outil OpenSSL.

    Remarque

    Si vous utilisez un système Linux, OpenSSL est préinstallé. Si vous utilisez un système Windows, téléchargez et installez le package logiciel OpenSSL.

    Pour plus d'informations sur l'obtention et la configuration du Fichier de certificat Keystore, du Fichier de clé privée et du Mot de passe de la clé privée, consultez Configurer un certificat client.

    1. Utilisez l'outil OpenSSL sur un système Linux ou installez le logiciel OpenSSL sur un système Windows pour générer un certificat autosigné (ca1.crt) et sa clé privée (ca1.key).

      openssl req -new -x509 -days 3650 -nodes -out ca1.crt -keyout ca1.key -subj "/CN=root-ca1"
    2. Générez un fichier de demande de signature de certificat client (client.csr) et une clé privée de certificat client (client.key).

      openssl req -new -nodes -text -out client.csr -keyout client.key -subj "/CN=<client_username>"

      Dans cette commande, la valeur CN après le paramètre -subj doit être définie sur le nom d'utilisateur utilisé par le client pour accéder à la base de données.

    3. Générez le certificat client (client.crt).

      openssl x509 -req -in client.csr -text -days 365  -CA ca1.crt -CAkey ca1.key -CAcreateserial  -out client.crt
    4. Si votre serveur RDS PostgreSQL requiert la vérification du certificat CA client, ouvrez le fichier de certificat autosigné client généré ca1.crt, copiez le contenu du certificat et collez-le dans la boîte de dialogue Client CA Certificate Public Key Content en tant que certificat CA client.

      Dans le panneau Configure Client CA Certificate, cliquez sur Enable Client CA Certificate. Dans la boîte de dialogue qui s'affiche, collez le contenu de la clé publique du certificat CA généré (ca1.crt) dans la zone de texte Public Key, puis cliquez sur OK. Après la modification du certificat CA client, l'instance redémarre automatiquement.

    5. Après avoir configuré le certificat CA client côté RDS, lorsque vous configurez la source de données PostgreSQL dans DataWorks, convertissez la clé privée du certificat client client.key en un fichier client.pk8 et téléchargez le fichier client.pk8 dans l'élément de configuration Private key file de la configuration de la source de données PostgreSQL DataWorks.

      cp client.key client.pk8
    6. Configurez le mot de passe de la clé privée.

      openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
      Remarque

      Lorsque vous exécutez la commande pour configurer le mot de passe de la clé privée, vous devez saisir un mot de passe. Si vous définissez un mot de passe, utilisez le même mot de passe pour le mot de passe de la clé privée dans la configuration de la source de données PostgreSQL DataWorks.

Configurer les fichiers d'authentification SSL PostgreSQL

Lorsque vous téléchargez les fichiers de certificat obtenus dans les éléments de configuration PostgreSQL DataWorks, effectuez les opérations suivantes :

ACL configuration : Accédez à la liste des instances RDS, cliquez sur l'instance RDS dans la région correspondante, cliquez sur l'ID de l'instance cible pour accéder à la page des détails de l'instance, puis cliquez sur Data Security > ACL Configuration pour modifier le paramètre. Vous pouvez sélectionner différentes méthodes d'authentification SSL. Pour plus d'informations, consultez Configurer ACL.

Les méthodes d'authentification SSL disponibles sont :

  • prefer : Chiffre la liaison de données.

  • verify-ca : Chiffre la liaison de données et vérifie l'authenticité du certificat client.

  • verify-full : Chiffre la liaison de données, vérifie l'authenticité du certificat client et vérifie que le CN du certificat correspond au nom d'utilisateur de la base de données.

  • cert : Utilise un certificat au lieu d'un mot de passe pour se connecter, chiffre la liaison de données, vérifie l'authenticité du certificat client et vérifie que le CN du certificat correspond au nom d'utilisateur de la base de données.

Remarque
  • Si la méthode d'authentification ACL est définie sur prefer, le serveur PostgreSQL n'impose pas la vérification du certificat client.

  • Si la méthode d'authentification ACL est définie sur verify-ca dans RDS PostgreSQL, vous devez télécharger le certificat client correct lors de la configuration de la source de données PostgreSQL dans DataWorks, afin que le serveur puisse vérifier l'authentification du client.