DBA: mengganti "gajah" di penyeberangan

Sebagai DBA biasa, kami menunggu rilis beberapa versi minor untuk PostgreSQL 13, yang seharusnya menyenangkan kami dengan banyak hal berguna , dan sekarang kami siap untuk mentransfer database layanan pemantauan kami untuk DBMS ini dari versi 12 ke 13 .





Tetapi bagaimana melakukan ini dengan waktu henti yang minimal, atau lebih baik tanpa itu sama sekali? Fungsionalitas Pembungkus Data Asing akan datang untuk menyelamatkan , atau lebih tepatnya, postgres_fdw .





Struktur dasar sumber

Beberapa detail tentang struktur dasar layanan kami, yang membantu kami merekam data yang masuk dengan sangat cepat, saya memberi tahu di artikel "Menulis di PostgreSQL di sublight: 1 host, 1 hari, 1TB" dan "Menghemat uang volume besar di PostgreSQL " . Singkatnya, partisi database yang kompeten memecahkan banyak masalah kinerja.





, 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