

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Replica logica
<a name="logical-replication-considerations"></a>

La replica logica è un metodo per replicare gli oggetti di dati e le relative modifiche in base all'identità di replica degli oggetti e alle relative modifiche. La replica logica utilizza un modello di *pubblicazione* e *sottoscrizione* in cui uno o più abbonati sottoscrivono una o più pubblicazioni su un nodo publisher. Gli abbonati estraggono i dati dalle pubblicazioni a cui sono abbonati.

La replica logica offre un controllo granulare sia sulla replica che sulla sicurezza dei dati. È possibile utilizzare la replica logica nei seguenti casi d'uso:
+ Replica tra diverse versioni principali di PostgreSQL
+ Replica tra istanze PostgreSQL su piattaforme diverse (ad esempio, da Linux a Windows)

## Architettura
<a name="architecture-logical-replication"></a>

Le seguenti fasi del flusso di lavoro mostrano come funziona un'architettura di replica logica:

1. Si scatta un'istantanea dei dati nel database dell'editore e si copiano i dati nel database dei sottoscrittori.

1. Le modifiche nei database degli editori vengono inviate al sottoscrittore in tempo reale.

1. L'abbonato applica i dati nello stesso ordine dell'editore, in modo da garantire la coerenza delle transazioni per le pubblicazioni incluse in un unico abbonamento.

Una *pubblicazione* può essere definita su un'istanza principale (editore). Una pubblicazione è un insieme di modifiche generate da una tabella o da un gruppo di tabelle. È possibile scegliere le modifiche da una combinazione di operazioni INSERT, UPDATE, DELETE e TRUNCATE. Per impostazione predefinita, tutte queste modifiche vengono replicate nel database dei sottoscrittori. Ciò è in contrasto con la replica fisica, in cui per la replica vengono utilizzati indirizzi di blocco esatti. byte-by-byte

Una tabella pubblicata deve avere una [REPLICA IDENTITY](https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY) configurata per replicare le operazioni UPDATE e DELETE in modo che sia possibile identificare le righe appropriate da aggiornare o eliminare sul lato del sottoscrittore. Nella maggior parte dei casi, l'identità della replica è determinata da una chiave primaria o da una chiave univoca. Se non è presente una chiave primaria e non è possibile crearne una, è possibile impostare l'identità di replica su. `full` Ciò significa che l'intera riga diventa la chiave. Si consiglia di impostare l'identità di replica `full` come ultima risorsa, poiché questa impostazione è inefficiente.

Un *abbonamento* è l'aspetto secondario della replica logica. *Il nodo in cui viene definito un abbonamento viene definito sottoscrittore.* Un abbonamento definisce la connessione a un altro database e a un insieme di pubblicazioni (una o più) a cui desidera abbonarsi.

## Impostazioni di configurazione
<a name="config-settings"></a>

Le seguenti configurazioni sono necessarie per le impostazioni dell'editore:
+ Impostato su`wal_level`. `logical`
+ Impostato `max_replication_slots` per contenere almeno il numero di abbonamenti previsti per la connessione e alcuni slot di riserva per la sincronizzazione delle tabelle.
+ Impostato `max_wal_senders` per ospitare `max_replication_slots` e il numero di repliche fisiche.

Le seguenti configurazioni sono necessarie per le impostazioni degli abbonati:
+ Impostato `max_replication_slots` per contenere il numero minimo di abbonamenti che intendi aggiungere al sottoscrittore e alcuni abbonamenti di riserva per la sincronizzazione delle tabelle.
+ Impostato `max_logical_replication_workers` per contenere almeno il numero di sottoscrizioni e alcuni worker di riserva per la sincronizzazione delle tabelle.
+ Impostare `max_worker_processes` almeno su (`max_logical_replication_workers`\+`1`).

Ogni sottoscrizione riceve le modifiche tramite uno slot di replica.

I passaggi seguenti mostrano come eseguire la replica logica:

1. Crea un editore utilizzando il comando [CREATE PUBLICATION](https://www.postgresql.org/docs/10/sql-createpublication.html) per un gruppo di tabelle (che faranno parte della replica) nel database di origine.

1. Crea un sottoscrittore utilizzando il comando [CREATE SUBSCRIPTION](https://www.postgresql.org/docs/10/sql-createsubscription.html), quindi fornisci i dettagli della pubblicazione quando crei il sottoscrittore.

1. Il caricamento iniziale dei dati inizia automaticamente dal database di origine al database di destinazione.

1. I dati di modifica acquisiti dagli slot di replica vengono replicati nel database di destinazione.

1. Usa [pg\_stat\_replication](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-VIEW) (una tabella di catalogo) per verificare lo stato della replica. [Usa pg\_stat\_replication\_slots per controllare lo slot di replica.](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-SLOTS-VIEW)

Per ulteriori informazioni, consulta il post [Utilizzo della replica logica per replicare Amazon RDS gestito per PostgreSQL e Amazon Aurora per PostgreSQL autogestito](https://aws.amazon.com/blogs/database/using-logical-replication-to-replicate-managed-amazon-rds-for-postgresql-and-amazon-aurora-to-self-managed-postgresql/) nel blog di AWS Database.

## Limitazioni
<a name="limitations-logical-replication"></a>

Ti consigliamo di considerare le seguenti limitazioni del metodo di replica logica prima di iniziare la migrazione:
+ La replica logica presenta attualmente il maggior numero di restrizioni e lacune di funzionalità.
+ La replica logica non è in grado di replicare operazioni in linguaggio di definizione dei dati (DDL), sequenze e operazioni su oggetti di grandi dimensioni. Un'azione di troncatura (che si applica a una tabella con una chiave esterna) deve includere tabelle correlate nella stessa sottoscrizione.

[Per ulteriori informazioni sui limiti della replica logica, vedere 31.6. Restrizioni](https://www.postgresql.org/docs/current/logical-replication-restrictions.html) nella documentazione di PostgreSQL.