DBA: mudando os "elefantes" na travessia

Como DBAs normais, esperamos pelo lançamento de algumas versões secundárias do PostgreSQL 13, o que deve nos agradar com muitas coisas úteis , e agora estamos prontos para transferir o banco de dados de nosso serviço de monitoramento para este DBMS da versão 12 para a 13 .





Mas como fazer isso com o mínimo de tempo de inatividade, ou melhor sem nada? A funcionalidade de wrappers de dados externos virá em seu auxílio , ou melhor, postgres_fdw .





Estrutura de base de origem

Alguns detalhes sobre a estrutura da base do nosso serviço, que nos ajudam a registrar muito rapidamente os dados de entrada, contei nos artigos "Escrevendo em PostgreSQL no sublight: 1 host, 1 dia, 1TB" e "Economizando um bom centavo em grandes volumes em PostgreSQL " . Em suma, o particionamento de banco de dados competente resolve muitos problemas de desempenho.





, 100-150GB . tst



PostgreSQL 12:





CREATE TABLE archive(
  dt
    date
, val
    integer
)
PARTITION BY RANGE(dt); --   

CREATE TABLE archive_20210401 --   
  PARTITION OF archive
    FOR VALUES FROM ('2021-04-01') TO ('2021-04-02');
    -- dt >= '2021-04-01' AND dt < '2021-04-02'

CREATE TABLE archive_20210402
  PARTITION OF archive
    FOR VALUES FROM ('2021-04-02') TO ('2021-04-03');
      
      



dt



, PARTITION BY RANGE



FOR VALUES FROM (dt) TO (dt + 1)



PARTITION BY LIST



, - , .





, :





INSERT INTO archive
VALUES
  ('2021-04-01', 1)
, ('2021-04-02', 2)
RETURNING
  tableoid::regclass
, *;
      
      



 tableoid        |  dt        | val
archive_20210401 | 2021-04-01 |   1
archive_20210402 | 2021-04-02 |   2
      
      



tableoid



- , ( - ), . "PostgreSQL Antipatterns: ".





""

, , 1-2 "" "" .





PostgreSQL 13 , . , v12 :5439



, v13 :5440



.





:





CREATE TABLE archive(
  dt
    date
, val
    integer
)
PARTITION BY RANGE(dt);

CREATE TABLE archive_20210403
  PARTITION OF archive
    FOR VALUES FROM ('2021-04-03') TO ('2021-04-04');

      
      



IMPORT FOREIGN SCHEMA, (, , ...). , , :





CREATE EXTENSION postgres_fdw;

CREATE SERVER postgresql_12
  FOREIGN DATA WRAPPER postgres_fdw
    OPTIONS (host '127.0.0.1', port '5439', dbname 'tst');

CREATE USER MAPPING FOR postgres
  SERVER postgresql_12
    OPTIONS (user 'postgres', password 'postgres');
      
      



, :





CREATE FOREIGN TABLE archive_old
  PARTITION OF archive
    FOR VALUES FROM ('-infinity') TO ('2021-04-03')
    -- dt < '2021-04-03'
  SERVER postgresql_12
    OPTIONS(table_name 'archive');
      
      



PARTITION BY RANGE



BY LIST



, .





, :





INSERT INTO archive
VALUES
  ('2021-04-01', 1)
, ('2021-04-02', 2)
, ('2021-04-03', 3)
RETURNING
  tableoid::regclass
, *;
      
      



 tableoid        |  dt        | val
archive_old      | 2021-04-01 |   1 --  
archive_old      | 2021-04-02 |   2
archive_20210403 | 2021-04-03 |   3 --  
      
      



FDW

- , FDW- updatable



, - use_remote_estimate



fetch_size



.





, FDW-, - PARTITION BY HASH



, .








All Articles