PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách nâng cấp PostgreSQL 11 lên PostgreSQL 12 với Zero Downtime

Cách nâng cấp cơ sở dữ liệu trực quan nhất mà bạn có thể nghĩ đến là tạo một bản sao trong một phiên bản mới và thực hiện chuyển đổi dự phòng ứng dụng sang nó và thực sự nó hoạt động hoàn hảo trong các công cụ khác. Với PostgreSQL, điều này đã từng là không thể theo cách gốc. Để hoàn thành nâng cấp, bạn cần nghĩ đến các cách nâng cấp khác, chẳng hạn như sử dụng pg_upgrade, hủy và khôi phục hoặc sử dụng một số công cụ của bên thứ ba như Slony hoặc Bucardo, tất cả chúng đều có những lưu ý riêng. Điều này là do cách PostgreSQL sử dụng để triển khai nhân rộng.

PostgreSQL streaming replication (bản sao PostgreSQL thông thường) là một bản sao vật lý sao chép các thay đổi ở cấp độ từng byte, tạo ra một bản sao giống hệt của cơ sở dữ liệu trong một máy chủ khác. Phương pháp này có rất nhiều hạn chế khi nghĩ đến việc nâng cấp, vì bạn không thể tạo bản sao trong một phiên bản máy chủ khác hoặc thậm chí trong một kiến ​​trúc khác.

Kể từ PostgreSQL 10, nó đã triển khai sao chép hợp lý tích hợp sẵn, trái ngược với sao chép vật lý, bạn có thể sao chép giữa các phiên bản chính khác nhau của PostgreSQL. Tất nhiên, điều này sẽ mở ra một cánh cửa mới cho các chiến lược nâng cấp.

Trong blog này, chúng ta sẽ xem cách bạn có thể nâng cấp PostgreSQL 11 của mình lên PostgreSQL 12 mà không có thời gian chết bằng cách sử dụng sao chép logic.

Sao chép lôgic PostgreSQL

Sao chép lôgic là phương pháp sao chép các đối tượng dữ liệu và các thay đổi của chúng, dựa trên nhận dạng bản sao của chúng (thường là khóa chính). Nó dựa trên chế độ xuất bản và đăng ký, trong đó một hoặc nhiều người đăng ký đăng ký một hoặc nhiều ấn phẩm trên một nút nhà xuất bản.

Ấn phẩm là một tập hợp các thay đổi được tạo ra từ một bảng hoặc một nhóm bảng (còn được gọi là tập sao chép). Nút nơi một ấn phẩm được xác định được gọi là nhà xuất bản. Đăng ký là mặt sau của sao chép hợp lý. Nút nơi đăng ký được xác định được gọi là người đăng ký và nó xác định kết nối với cơ sở dữ liệu khác và tập hợp các ấn phẩm (một hoặc nhiều) mà nó muốn đăng ký. Người đăng ký lấy dữ liệu từ các ấn phẩm mà họ đăng ký.

Bản sao lôgic được xây dựng với kiến ​​trúc tương tự như bản sao luồng vật lý. Nó được thực hiện bởi các quy trình "walsender" và "apply". Quá trình walsender bắt đầu giải mã logic của WAL và tải plugin giải mã logic tiêu chuẩn. Plugin chuyển các thay đổi được đọc từ WAL sang giao thức sao chép hợp lý và lọc dữ liệu theo đặc điểm kỹ thuật xuất bản. Sau đó, dữ liệu được chuyển liên tục bằng cách sử dụng giao thức sao chép trực tuyến tới trình xử lý ứng dụng, ánh xạ dữ liệu tới các bảng cục bộ và áp dụng các thay đổi riêng lẻ khi chúng được nhận, theo thứ tự giao dịch chính xác.

Sao chép lôgic bắt đầu bằng cách chụp nhanh dữ liệu trên cơ sở dữ liệu của nhà xuất bản và sao chép đó cho người đăng ký. Dữ liệu ban đầu trong các bảng đã đăng ký hiện có được chụp nhanh và sao chép trong một phiên bản song song của một loại quy trình áp dụng đặc biệt. Quá trình này sẽ tạo khe sao chép tạm thời của riêng nó và sao chép dữ liệu hiện có. Sau khi dữ liệu hiện có được sao chép, worker sẽ vào chế độ đồng bộ hóa, điều này đảm bảo rằng bảng được đưa đến trạng thái đồng bộ với quy trình áp dụng chính bằng cách phát trực tuyến bất kỳ thay đổi nào đã xảy ra trong quá trình sao chép dữ liệu ban đầu bằng cách sử dụng sao chép logic tiêu chuẩn. Khi quá trình đồng bộ hóa được thực hiện xong, việc kiểm soát quá trình sao chép của bảng được đưa trở lại quy trình áp dụng chính, nơi quá trình sao chép vẫn tiếp tục như bình thường. Các thay đổi về nhà xuất bản được gửi đến người đăng ký khi chúng xảy ra trong thời gian thực.

Cách nâng cấp PostgreSQL 11 lên PostgreSQL 12 bằng cách sử dụng Logical Replication

Chúng tôi sẽ định cấu hình sao chép hợp lý giữa hai phiên bản chính khác nhau của PostgreSQL (11 và 12), và tất nhiên, sau khi bạn làm việc này, chỉ cần thực hiện chuyển đổi dự phòng ứng dụng vào cơ sở dữ liệu với phiên bản mới hơn.

Chúng tôi sẽ thực hiện các bước sau để đưa tính năng sao chép hợp lý hoạt động:

  • Định cấu hình nút nhà xuất bản
  • Định cấu hình nút người đăng ký
  • Tạo người dùng đăng ký
  • Tạo ấn phẩm
  • Tạo cấu trúc bảng trong người đăng ký
  • Tạo đăng ký
  • Kiểm tra trạng thái sao chép

Hãy bắt đầu.

Về phía nhà xuất bản, chúng tôi sẽ định cấu hình các thông số sau trong tệp postgresql.conf:

  • nghe_addresses: (Các) địa chỉ IP nào để nghe. Chúng tôi sẽ sử dụng '*' cho tất cả.
  • wal_level: Xác định lượng thông tin được ghi vào WAL. Chúng tôi sẽ đặt nó thành "logic".
  • max_replication_slots :Chỉ định số lượng khe sao chép tối đa mà máy chủ có thể hỗ trợ. Nó phải được đặt thành ít nhất số lượng đăng ký dự kiến ​​kết nối, cộng với một số dự trữ để đồng bộ hóa bảng.
  • max_wal_senders: Chỉ định số lượng tối đa các kết nối đồng thời từ máy chủ dự phòng hoặc máy khách sao lưu cơ sở phát trực tuyến. Nó phải được đặt thành ít nhất bằng max_replication_slots cộng với số lượng bản sao vật lý được kết nối cùng một lúc.

Hãy nhớ rằng một số tham số trong số này yêu cầu khởi động lại dịch vụ PostgreSQL để áp dụng.

Tệp pg_hba.conf cũng cần được điều chỉnh để cho phép sao chép. Bạn cần cho phép người dùng bản sao kết nối với cơ sở dữ liệu.

Vì vậy, dựa trên điều này, hãy định cấu hình nhà xuất bản (trong trường hợp này là máy chủ PostgreSQL 11) như sau:

postgresql.conf:

listen_addresses = '*'

wal_level = logical

max_wal_senders = 8

max_replication_slots = 4

pg_hba.conf:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host     all     rep1     10.10.10.131/32     md5

Bạn phải thay đổi người dùng (trong ví dụ này là rep1), người dùng sẽ được sử dụng để sao chép và địa chỉ IP 10.10.10.131/32 cho IP tương ứng với nút PostgreSQL 12 của bạn.

Về phía người đăng ký, nó cũng yêu cầu max_replication_slots phải được đặt. Trong trường hợp này, nó phải được đặt thành ít nhất số lượng đăng ký sẽ được thêm vào người đăng ký.

Các tham số khác cũng cần được đặt ở đây là:

  • max_logical_replication_workers :Chỉ định số lượng công nhân sao chép lôgic tối đa. Điều này bao gồm cả công nhân áp dụng và công nhân đồng bộ hóa bảng. Các công nhân sao chép lôgic được lấy từ nhóm được xác định bởi max_worker_processes. Nó phải được đặt thành ít nhất số lượng đăng ký, một lần nữa cộng với một số dự trữ để đồng bộ hóa bảng.
  • max_worker_processes :Đặt số lượng quy trình nền tối đa mà hệ thống có thể hỗ trợ. Nó có thể cần được điều chỉnh để phù hợp với nhân viên nhân bản, ít nhất là max_logical_replication_workers + 1. Tham số này yêu cầu khởi động lại PostgreSQL.

Vì vậy, bạn phải định cấu hình người đăng ký (trong trường hợp này là máy chủ PostgreSQL 12) như sau:

postgresql.conf:

listen_addresses = '*'

max_replication_slots = 4

max_logical_replication_workers = 4

max_worker_processes = 8

Vì PostgreSQL 12 này sẽ sớm là nút chính mới, bạn nên cân nhắc thêm các tham số wal_level và archive_mode trong bước này để tránh khởi động lại dịch vụ mới sau này.

wal_level = logical

archive_mode = on

Các thông số này sẽ hữu ích nếu bạn muốn thêm một bản sao mới hoặc để sử dụng các bản sao lưu PITR.

Trong nhà xuất bản, bạn phải tạo người dùng mà người đăng ký sẽ kết nối:

world=# CREATE ROLE rep1 WITH LOGIN PASSWORD '*****' REPLICATION;

CREATE ROLE

Vai trò được sử dụng cho kết nối sao chép phải có thuộc tính REPLICATION. Quyền truy cập cho vai trò phải được định cấu hình trong pg_hba.conf và nó phải có thuộc tính LOGIN.

Để có thể sao chép dữ liệu ban đầu, vai trò được sử dụng cho kết nối sao chép phải có đặc quyền CHỌN trên bảng đã xuất bản.

world=# GRANT SELECT ON ALL TABLES IN SCHEMA public to rep1;

GRANT

Chúng tôi sẽ tạo ấn phẩm pub1 trong nút nhà xuất bản, cho tất cả các bảng:

world=# CREATE PUBLICATION pub1 FOR ALL TABLES;

CREATE PUBLICATION

Người dùng sẽ tạo ấn phẩm phải có đặc quyền TẠO trong cơ sở dữ liệu, nhưng để tạo ấn phẩm tự động xuất bản tất cả các bảng, người dùng phải là người dùng cấp cao.

Để xác nhận ấn phẩm đã tạo, chúng tôi sẽ sử dụng danh mục pg_publication. Danh mục này chứa thông tin về tất cả các ấn phẩm được tạo trong cơ sở dữ liệu.

world=# SELECT * FROM pg_publication;

-[ RECORD 1 ]+-----

pubname      | pub1

pubowner     | 10

puballtables | t

pubinsert    | t

pubupdate    | t

pubdelete    | t

pubtruncate  | t

Mô tả cột:

  • pubname :Tên của ấn phẩm.
  • pubowner :Chủ sở hữu của ấn phẩm.
  • puballtables :Nếu đúng, ấn phẩm này tự động bao gồm tất cả các bảng trong cơ sở dữ liệu, bao gồm bất kỳ bảng nào sẽ được tạo trong tương lai.
  • pubinsert :Nếu đúng, các thao tác INSERT sẽ được sao chép cho các bảng trong ấn phẩm.
  • pubupdate :Nếu đúng, các thao tác UPDATE sẽ được sao chép cho các bảng trong ấn phẩm.
  • pubdelete :Nếu đúng, các thao tác DELETE được sao chép cho các bảng trong ấn phẩm.
  • pubtruncate :Nếu đúng, các phép toán TRUNCATE được sao chép cho các bảng trong ấn phẩm.

Vì lược đồ không được sao chép, bạn phải tạo một bản sao lưu trong PostgreSQL 11 và khôi phục nó trong PostgreSQL 12. Bản sao lưu sẽ chỉ được thực hiện cho lược đồ, vì thông tin sẽ được sao chép ban đầu chuyển nhượng.

Trong PostgreSQL 11:

$ pg_dumpall -s > schema.sql

Trong PostgreSQL 12:

$ psql -d postgres -f schema.sql

Khi bạn có lược đồ của mình trong PostgreSQL 12, bạn cần tạo đăng ký, thay thế các giá trị của máy chủ, dbname, người dùng và mật khẩu bằng những giá trị tương ứng với môi trường của bạn.

PostgreSQL 12:

world=# CREATE SUBSCRIPTION sub1 CONNECTION 'host=10.10.10.130 dbname=world user=rep1 password=*****' PUBLICATION pub1;

NOTICE:  created replication slot "sub1" on publisher

CREATE SUBSCRIPTION

Ở trên sẽ bắt đầu quá trình sao chép, quá trình này sẽ đồng bộ hóa nội dung bảng ban đầu của các bảng trong ấn phẩm và sau đó bắt đầu sao chép các thay đổi gia tăng đối với các bảng đó.

Người dùng tạo đăng ký phải là người dùng cấp cao. Quá trình đăng ký đăng ký sẽ chạy trong cơ sở dữ liệu cục bộ với các đặc quyền của người dùng cấp cao.

Để xác minh đăng ký đã tạo, bạn có thể sử dụng danh mục pg_stat_subscription. Dạng xem này sẽ chứa một hàng cho mỗi đăng ký đối với công nhân chính (với PID rỗng nếu công nhân không chạy) và các hàng bổ sung cho công nhân xử lý bản sao dữ liệu ban đầu của các bảng đã đăng ký.

world=# SELECT * FROM pg_stat_subscription;

-[ RECORD 1 ]---------+------------------------------

subid                 | 16422

subname               | sub1

pid                   | 476

relid                 |

received_lsn          | 0/1771668

last_msg_send_time    | 2020-09-29 17:40:34.711411+00

last_msg_receipt_time | 2020-09-29 17:40:34.711533+00

latest_end_lsn        | 0/1771668

latest_end_time       | 2020-09-29 17:40:34.711411+00

Mô tả cột:

  • subid :OID của đăng ký.
  • subname :Tên của gói đăng ký.
  • pid :ID quy trình của quy trình nhân viên đăng ký.
  • relid :OID của mối quan hệ mà worker đang đồng bộ hóa; null cho công nhân áp dụng chính.
  • got_lsn :Vị trí nhật ký ghi trước lần cuối nhận được, giá trị ban đầu của trường này là 0.
  • last_msg_send_time :Thời gian gửi của tin nhắn cuối cùng nhận được từ người gửi WAL gốc.
  • last_msg_receipt_time :Thời gian nhận của tin nhắn cuối cùng nhận được từ người gửi WAL gốc.
  • last_end_lsn :Vị trí nhật ký ghi trước lần cuối được báo cáo cho người gửi WAL gốc.
  • last_end_time :Thời gian của vị trí nhật ký ghi trước lần cuối được báo cáo cho người gửi WAL gốc.

Để xác minh trạng thái sao chép trong nút chính, bạn có thể sử dụng pg_stat_replication:

world=# SELECT * FROM pg_stat_replication;

-[ RECORD 1 ]----+------------------------------

pid              | 527

usesysid         | 16428

usename          | rep1

application_name | sub1

client_addr      | 10.10.10.131

client_hostname  |

client_port      | 35570

backend_start    | 2020-09-29 17:40:04.404905+00

backend_xmin     |

state            | streaming

sent_lsn         | 0/1771668

write_lsn        | 0/1771668

flush_lsn        | 0/1771668

replay_lsn       | 0/1771668

write_lag        |

flush_lag        |

replay_lag       |

sync_priority    | 0

sync_state       | async

Mô tả cột:

  • pid :ID quy trình của quy trình người gửi WAL.
  • useysid :OID của người dùng đã đăng nhập vào quy trình người gửi WAL này.
  • usename :Tên của người dùng đã đăng nhập vào quy trình người gửi WAL này.
  • application_name :Tên của ứng dụng được kết nối với người gửi WAL này.
  • client_addr :Địa chỉ IP của máy khách được kết nối với người gửi WAL này. Nếu trường này trống, nó cho biết rằng máy khách được kết nối qua ổ cắm Unix trên máy chủ.
  • client_hostname :Tên máy chủ của máy khách được kết nối, như được báo cáo bởi tra cứu DNS ngược của client_addr. Trường này sẽ chỉ có giá trị không trống đối với các kết nối IP và chỉ khi log_hostname được bật.
  • client_port :Số cổng TCP mà máy khách đang sử dụng để giao tiếp với người gửi WAL này hoặc -1 nếu sử dụng ổ cắm Unix.
  • backend_start :Thời điểm bắt đầu quá trình này.
  • backend_xmin :Đường chân trời xmin ở chế độ chờ này được hot_standby_feedback báo cáo.
  • trạng thái :Trạng thái người gửi WAL hiện tại. Các giá trị có thể có là:khởi động, bắt kịp, phát trực tuyến, sao lưu và dừng.
  • sent_lsn :Vị trí nhật ký ghi trước lần cuối được gửi trên kết nối này.
  • write_lsn :Vị trí nhật ký ghi trước lần cuối được máy chủ dự phòng này ghi vào đĩa.
  • flush_lsn :Vị trí nhật ký ghi trước lần cuối được máy chủ chờ này lưu vào đĩa.
  • replay_lsn :Vị trí nhật ký ghi trước lần cuối được phát lại vào cơ sở dữ liệu trên máy chủ dự phòng này.
  • write_lag :Thời gian trôi qua từ khi gửi cục bộ WAL gần đây đến khi nhận được thông báo rằng máy chủ dự phòng này đã viết nó (nhưng chưa xóa hoặc áp dụng nó).
  • flush_lag :Thời gian trôi qua từ khi gửi cục bộ WAL gần đây đến khi nhận được thông báo rằng máy chủ dự phòng này đã viết và xóa nó (nhưng chưa áp dụng nó).
  • replay_lag :Thời gian trôi qua từ khi gửi cục bộ WAL gần đây đến khi nhận được thông báo rằng máy chủ dự phòng này đã viết, xóa và áp dụng nó.
  • sync_priosystem :Mức độ ưu tiên của máy chủ dự phòng này để được chọn làm chế độ chờ đồng bộ trong bản sao đồng bộ dựa trên mức độ ưu tiên.
  • sync_state :Trạng thái đồng bộ của máy chủ dự phòng này. Các giá trị có thể có là không đồng bộ, tiềm năng, đồng bộ hóa, túc số.

Để xác minh khi quá trình chuyển ban đầu kết thúc, bạn có thể kiểm tra nhật ký PostgreSQL trên người đăng ký:

2020-09-29 17:40:04.403 UTC [476] LOG:  logical replication apply worker for subscription "sub1" has started

2020-09-29 17:40:04.411 UTC [477] LOG:  logical replication table synchronization worker for subscription "sub1", table "city" has started

2020-09-29 17:40:04.422 UTC [478] LOG:  logical replication table synchronization worker for subscription "sub1", table "country" has started

2020-09-29 17:40:04.516 UTC [477] LOG:  logical replication table synchronization worker for subscription "sub1", table "city" has finished

2020-09-29 17:40:04.522 UTC [479] LOG:  logical replication table synchronization worker for subscription "sub1", table "countrylanguage" has started

2020-09-29 17:40:04.570 UTC [478] LOG:  logical replication table synchronization worker for subscription "sub1", table "country" has finished

2020-09-29 17:40:04.676 UTC [479] LOG:  logical replication table synchronization worker for subscription "sub1", table "countrylanguage" has finished

Hoặc kiểm tra biến srsubstate trên danh mục pg_subscription_rel. Danh mục này chứa trạng thái cho mỗi mối quan hệ được sao chép trong mỗi đăng ký.

world=# SELECT * FROM pg_subscription_rel;

 srsubid | srrelid | srsubstate | srsublsn

---------+---------+------------+-----------

   16422 |   16386 | r          | 0/1771630

   16422 |   16392 | r          | 0/1771630

   16422 |   16399 | r          | 0/1771668

(3 rows)

Mô tả cột:

  • srsubid :Tham chiếu đến đăng ký.
  • srrelid :Tham chiếu đến quan hệ.
  • srsubstate :Mã trạng thái:i =khởi tạo, d =dữ liệu đang được sao chép, s =đồng bộ hóa, r =sẵn sàng (sao chép bình thường).
  • srsublsn :Kết thúc LSN cho các trạng thái s và r.

Bạn có thể chèn một số bản ghi thử nghiệm vào PostgreSQL 11 của mình và xác thực rằng bạn có chúng trong PostgreSQL 12 của mình:

PostgreSQL 11:

world=# INSERT INTO city (id,name,countrycode,district,population) VALUES (5001,'city1','USA','District1',10000);

INSERT 0 1

world=# INSERT INTO city (id,name,countrycode,district,population) VALUES (5002,'city2','ITA','District2',20000);

INSERT 0 1

world=# INSERT INTO city (id,name,countrycode,district,population) VALUES (5003,'city3','CHN','District3',30000);

INSERT 0 1

PostgreSQL 12:

world=# SELECT * FROM city WHERE id>5000;

  id  | name  | countrycode | district  | population

------+-------+-------------+-----------+------------

 5001 | city1 | USA         | District1 |      10000

 5002 | city2 | ITA         | District2 |      20000

 5003 | city3 | CHN         | District3 |      30000

(3 rows)

Tại thời điểm này, bạn đã có mọi thứ sẵn sàng để trỏ ứng dụng của mình tới PostgreSQL 12.

Đối với điều này, trước hết, bạn cần xác nhận rằng bạn không có độ trễ sao chép.

Trên nút chính:

world=# SELECT  application_name,  pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) lag FROM pg_stat_replication;

-[ RECORD 1 ]----+-----

application_name | sub1

lag              | 0

Và bây giờ, bạn chỉ cần thay đổi điểm cuối từ ứng dụng hoặc bộ cân bằng tải (nếu có) sang máy chủ PostgreSQL 12 mới.

Nếu bạn có bộ cân bằng tải như HAProxy, bạn có thể định cấu hình nó bằng cách sử dụng PostgreSQL 11 đang hoạt động và PostgreSQL 12 làm bản sao lưu, theo cách này:

Vì vậy, nếu bạn vừa tắt nút chính cũ trong PostgreSQL 11, máy chủ sao lưu, trong trường hợp này là trong PostgreSQL 12, bắt đầu nhận lưu lượng truy cập một cách minh bạch cho người dùng / ứng dụng.

Khi kết thúc quá trình di chuyển, bạn có thể xóa đăng ký trong nút chính mới của mình trong PostgreSQL 12:

world=# DROP SUBSCRIPTION sub1;

NOTICE:  dropped replication slot "sub1" on publisher

DROP SUBSCRIPTION

Và xác minh rằng nó được xóa đúng cách:

world=# SELECT * FROM pg_subscription_rel;

(0 rows)

world=# SELECT * FROM pg_stat_subscription;

(0 rows)

Hạn chế

Trước khi sử dụng bản sao lôgic, hãy ghi nhớ những hạn chế sau:

  • Lược đồ cơ sở dữ liệu và lệnh DDL không được sao chép. Lược đồ ban đầu có thể được sao chép bằng cách sử dụng pg_dump --schema-only.
  • Dữ liệu trình tự không được sao chép. Dữ liệu trong các cột nối tiếp hoặc cột nhận dạng được hỗ trợ bởi chuỗi sẽ được sao chép như một phần của bảng, nhưng bản thân chuỗi sẽ vẫn hiển thị giá trị bắt đầu trên người đăng ký.
  • Sao chép lệnh TRUNCATE được hỗ trợ, nhưng phải cẩn thận khi cắt bớt các nhóm bảng được kết nối bằng khóa ngoài. Khi sao chép một hành động cắt ngắn, người đăng ký sẽ cắt ngắn cùng một nhóm bảng đã bị cắt bớt trên nhà xuất bản, được chỉ định rõ ràng hoặc được thu thập ngầm thông qua CASCADE, trừ các bảng không phải là một phần của đăng ký. Điều này sẽ hoạt động chính xác nếu tất cả các bảng bị ảnh hưởng là một phần của cùng một gói đăng ký. Nhưng nếu một số bảng được cắt ngắn trên người đăng ký có liên kết khóa ngoại đến các bảng không thuộc cùng một (hoặc bất kỳ) đăng ký nào, thì việc áp dụng hành động cắt ngắn trên người đăng ký sẽ không thành công.
  • Các đối tượng lớn không được sao chép. Không có cách giải quyết nào khác ngoài việc lưu trữ dữ liệu trong các bảng thông thường.
  • Chỉ có thể sao chép từ bảng cơ sở sang bảng cơ sở. Có nghĩa là, các bảng trên ấn bản và bên đăng ký phải là bảng bình thường, không phải là dạng xem, dạng xem vật thể hóa, bảng gốc phân vùng hoặc bảng ngoại. Trong trường hợp phân vùng, bạn có thể sao chép phân cấp phân vùng một-một, nhưng hiện tại bạn không thể sao chép sang thiết lập phân vùng khác.

Kết luận

Giữ cho máy chủ PostgreSQL của bạn được cập nhật bằng cách thực hiện nâng cấp thường xuyên là một nhiệm vụ cần thiết nhưng khó khăn cho đến phiên bản PostgreSQL 10. May mắn thay, bây giờ nó là một câu chuyện khác nhờ sự tái tạo hợp lý.

Trong blog này, chúng tôi đã giới thiệu ngắn gọn về sao chép lôgic, một tính năng PostgreSQL được giới thiệu nguyên bản trong phiên bản 10 và chúng tôi đã chỉ cho bạn cách nó có thể giúp bạn thực hiện nâng cấp này từ thử thách PostgreSQL 11 lên PostgreSQL 12 với chiến lược thời gian chết bằng không.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo SQL để cập nhật khóa chính

  2. Cách make_timestamp () hoạt động trong PostgreSQL

  3. '$$' được sử dụng để làm gì trong PL / pgSQL

  4. Cách age () hoạt động trong PostgreSQL

  5. Sắp xếp các giá trị NULL vào cuối bảng