Lidar com sequências na replicação ativa-ativa - Amazon Relational Database Service

Lidar com sequências na replicação ativa-ativa

Uma instância de banco de dados do RDS para PostgreSQL com a extensão pgactive usa dois mecanismos de sequência diferentes para gerar valores exclusivos.

Sequências globais

Para usar uma sequência global, crie uma sequência local com a instrução CREATE SEQUENCE. Use pgactive.pgactive_snowflake_id_nextval(seqname) em vez de usingnextval(seqname) para obter o próximo valor exclusivo da sequência.

O exemplo a seguir cria uma rede global.

app=> CREATE TABLE gstest ( id bigint primary key, parrot text );
app=>CREATE SEQUENCE gstest_id_seq OWNED BY gstest.id;
app=> ALTER TABLE gstest \ ALTER COLUMN id SET DEFAULT \ pgactive.pgactive_snowflake_id_nextval('gstest_id_seq');
Sequências particionadas

Em sequências divididas ou particionadas, uma sequência normal do PostgreSQL é usada em cada nó. Cada sequência é incrementada na mesma quantidade e começa com diferentes deslocamentos. Por exemplo, com a etapa 100, o nó 1 gera a sequência como 101, 201, 301 e assim por diante, e o nó 2 gera a sequência como 102, 202, 302 e assim por diante. Esse esquema funciona bem mesmo que os nós não possam se comunicar por longos períodos, mas exige que o designer especifique um número máximo de nós ao estabelecer o esquema e requer configuração por nó. Erros podem facilmente levar à sobreposição de sequências.

É relativamente simples configurar essa abordagem com pgactive criando a sequência desejada em um nó da seguinte maneira:

CREATE TABLE some_table (generated_value bigint primary key);
app=> CREATE SEQUENCE some_seq INCREMENT 100 OWNED BY some_table.generated_value;
app=> ALTER TABLE some_table ALTER COLUMN generated_value SET DEFAULT nextval('some_seq');

Em seguida, chame setval em cada nó para fornecer um valor inicial de deslocamento diferente da forma a seguir.

app=> -- On node 1 SELECT setval('some_seq', 1); -- On node 2 SELECT setval('some_seq', 2);