PostgreSQL là một hệ thống cơ sở dữ liệu quan hệ đối tượng nguồn mở, mạnh mẽ, đáng tin cậy, ổn định, sẵn sàng và sẵn sàng cho doanh nghiệp theo phong cách của các dự án MariaDB, MySQL hoặc SQLite. Đó là một ACID (Atomicity, Consistency, Isolation, Durability) tuân thủ máy chủ cơ sở dữ liệu / động cơ có thể được tùy biến cao và bao gồm nhiều tính năng hấp dẫn, tạo sự thay thế tuyệt vời cho các công cụ cơ sở dữ liệu nói trên.
Tính năng trong nháy mắt
Các tính năng chính bao gồm hỗ trợ khóa, lượt xem, kết nối, trình kích hoạt và thủ tục được lưu trữ, hỗ trợ nhiều ngôn ngữ, hỗ trợ nhiều loại dữ liệu SQL, bao gồm BOOLEAN, CHAR, INTEGER, NUMERIC, VARCHAR, INTERVAL, TIMESTAMP và DATE.
Ngoài ra, phần mềm đi kèm với hỗ trợ lưu trữ các đối tượng lớn nhị phân, bao gồm tất cả các loại tệp đa phương tiện (video, âm thanh và hình ảnh) và cung cấp cho nhà phát triển giao diện lập trình gốc cho C, C ++, Python, Perl, Ruby, Ngôn ngữ lập trình Java, .Net, Tcl và ODBC.
Trong số các tính năng thú vị khác, chúng tôi có thể đề cập đến MVCC (Điều khiển đồng thời nhiều phiên bản), bảng mã, mã hóa ký tự nhiều byte, điểm trong thời gian phục hồi, trình tối ưu hóa truy vấn trưởng thành và kế hoạch, sao chép không đồng bộ, sao lưu trực tuyến, giao dịch lồng nhau (thường được gọi là savepoints), sao lưu nóng, viết ghi nhật ký cho khả năng chịu lỗi, hỗ trợ các bộ ký tự quốc tế, cũng như hỗ trợ Unicode.
PostgreSQL trong các số
Hiện tại, máy chủ cơ sở dữ liệu PostgreSQL hỗ trợ kích thước không giới hạn cho cơ sở dữ liệu, 32 TB phải là kích thước tối đa cho bảng, 1,6 TB mỗi hàng, 1 GB mỗi trường, hàng không giới hạn trên mỗi bảng, hỗ trợ từ 250 đến 1600 cột trên mỗi bảng , tùy thuộc vào loại cột và hỗ trợ chỉ mục không giới hạn trên mỗi bảng.
Hệ điều hành được hỗ trợ
PostgreSQL đã được thử nghiệm thành công trên tất cả các hệ điều hành chính, bao gồm GNU / Linux, BSD, Solaris, HP-UX, AIX, SGI IRIX, Solaris, Tru64, Mac OS X và Microsoft Windows. PostgreSQL có sẵn để tải xuống dưới dạng kho lưu trữ nguồn phổ quát, cũng như các gói nhị phân được biên dịch trước cho nhiều bản phân phối Linux, hỗ trợ cả kiến trúc 32 bit và 64 bit.
Tính năng mới trong bản phát hành này:
- Bản phát hành này khắc phục hai vấn đề bảo mật. Bản phát hành này cũng khắc phục các vấn đề được tìm thấy với các chỉ mục VACUUM, GIN & băm, truy vấn song song, sao chép lôgic và các lỗi khác được báo cáo trong ba tháng qua. Tất cả người dùng sử dụng các phiên bản bị ảnh hưởng của PostgreSQL nên cập nhật càng sớm càng tốt.
Tính năng mới trong phiên bản 10.4 / 11 Beta 1:
- Bản phát hành này khắc phục hai vấn đề bảo mật. Bản phát hành này cũng khắc phục các vấn đề được tìm thấy với các chỉ mục VACUUM, GIN & băm, truy vấn song song, sao chép lôgic và các lỗi khác được báo cáo trong ba tháng qua. Tất cả người dùng sử dụng các phiên bản bị ảnh hưởng của PostgreSQL nên cập nhật càng sớm càng tốt.
Tính năng mới trong phiên bản:
- Hạn chế hơn nữa khả năng hiển thị của pg_user_mappings.umoptions, để bảo vệ mật khẩu được lưu trữ dưới dạng tùy chọn ánh xạ người dùng (Noah Misch)
- Bản sửa lỗi cho CVE-2017-7486 không chính xác: nó cho phép người dùng xem các tùy chọn trong ánh xạ người dùng của riêng mình, ngay cả khi cô ấy không có quyền USAGE trên máy chủ nước ngoài được liên kết. Các tùy chọn này có thể bao gồm mật khẩu do chủ sở hữu máy chủ cung cấp thay vì chính người dùng đó. Vì information_schema.user_mapping_options không hiển thị các tùy chọn trong các trường hợp như vậy, nên pg_user_mappings cũng không nên. (CVE-2017-7547)
- Tự nó, bản vá này sẽ chỉ khắc phục hành vi trong cơ sở dữ liệu mới được initdb'd. Nếu bạn muốn áp dụng thay đổi này trong cơ sở dữ liệu hiện có, bạn sẽ cần thực hiện các thao tác sau:
- Khởi động lại postmaster sau khi thêm allow_system_table_mods = true vào postgresql.conf. (Trong các phiên bản hỗ trợ ALTER SYSTEM, bạn có thể sử dụng nó để thực hiện thay đổi cấu hình, nhưng bạn vẫn cần khởi động lại.)
- Trong mỗi cơ sở dữ liệu của cụm, chạy các lệnh sau làm superuser:
- SET search_path = pg_catalog;
- TẠO XEM HOẶC THAY THẾ pg_user_mappings AS
- CHỌN
- U.oid AS umid,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- TRƯỜNG HỢP KHI U.umuser = 0 THÌ
- 'công khai'
- ELSE
- Tên đăng nhập
- END AS usename,
- TRƯỜNG HỢP KHI NÀO (U.umuser 0 VÀ A.rolname = current_user
- AND (pg_has_role (S.srvowner, 'USAGE')
- OR has_server_privilege (S.oid, 'USAGE')))
- HOẶC (U.umuser = 0 AND pg_has_role (S.srvowner, 'USAGE'))
- HOẶC (CHỌN rolsuper TỪ pg_authid WHERE rolname = current_user)
- THEN U.umoptions
- ELSE NULL END AS sự hiển thị
- TỪ pg_user_mapping U
- LEFT JOIN pg_authid A BẬT (A.oid = U.umuser) THAM GIA
- pg_foreign_server S BẬT (U.umserver = S.oid);
- Đừng quên bao gồm các cơ sở dữ liệu template0 và template1, hoặc lỗ hổng sẽ vẫn tồn tại trong các cơ sở dữ liệu bạn tạo sau này. Để khắc phục template0, bạn sẽ cần phải tạm thời làm cho nó chấp nhận các kết nối. Trong PostgreSQL 9.5 trở lên, bạn có thể sử dụng
- mẫu ALTER DATABASE0 VỚI ALLOW_CONNECTIONS đúng;
- và sau đó sau khi sửa template0, hãy hoàn tác điều đó bằng
- mẫu ALTER DATABASE0 WITH ALLOW_CONNECTIONS sai;
- Trong các phiên bản trước, thay vào đó hãy sử dụng
- CẬP NHẬT pg_database THIẾT LẬP datallowconn = true WHERE datname = 'template0';
- CẬP NHẬT pg_database THIẾT LẬP datallowconn = false WHERE datname = 'template0';
- Cuối cùng, hãy xóa cài đặt cấu hình allow_system_table_mods và khởi động lại trình đăng bài.
- Không cho phép mật khẩu trống trong tất cả các phương thức xác thực dựa trên mật khẩu (Heikki Linnakangas)
- libpq bỏ qua các thông số mật khẩu trống và không truyền chúng đến máy chủ. Vì vậy, nếu mật khẩu của người dùng đã được đặt thành chuỗi trống, bạn không thể đăng nhập bằng mật khẩu đó thông qua psql hoặc các trình khách dựa trên libpq khác. Do đó, quản trị viên có thể tin rằng việc đặt mật khẩu thành trống tương đương với việc tắt đăng nhập mật khẩu. Tuy nhiên, với một khách hàng được sửa đổi hoặc không dựa trên libpq, việc đăng nhập có thể thực hiện được, tùy thuộc vào phương thức xác thực được cấu hình. Cụ thể là phương pháp phổ biến nhất, md5, chấp nhận mật khẩu trống. Thay đổi máy chủ để từ chối mật khẩu trống trong mọi trường hợp. (CVE-2017-7546)
- Hãy lo_put () kiểm tra đặc quyền UPDATE trên đối tượng lớn đích (Tom Lane, Michael Paquier)
- lo_put () chắc chắn sẽ yêu cầu các quyền tương tự như lowrite (), nhưng kiểm tra bị thiếu, cho phép bất kỳ người dùng nào thay đổi dữ liệu trong một đối tượng lớn. (CVE-2017-7548)
- Sửa tài liệu về quy trình nâng cấp máy chủ dự phòng bằng pg_upgrade (Bruce Momjian)
- Tài liệu trước đã hướng dẫn người dùng bắt đầu / dừng máy chủ chính sau khi chạy pg_upgrade nhưng trước khi đồng bộ hóa các máy chủ dự phòng. Chuỗi này không an toàn.
- Khắc phục sự cố đồng thời khóa chuỗi cập nhật tuple (Alvaro Herrera)
- Nếu nhiều phiên đồng thời khóa chuỗi cập nhật tuple với chế độ khóa không xung đột bằng ảnh chụp cũ và tất cả đều thành công, thì có thể một số phiên vẫn thất bại (và kết luận không có phiên bản tuple trực tiếp) do cuộc đua điều kiện. Điều này có hậu quả như kiểm tra khóa ngoài không thấy một bộ dữ liệu chắc chắn tồn tại nhưng đang được cập nhật đồng thời.
- Khắc phục sự cố hỏng dữ liệu tiềm năng khi đóng băng một bộ dữ liệu có XMAX là một phần tử đa với chính xác một thành viên vẫn thú vị (Teodor Sigaev)
- Tránh tràn số nguyên và xảy ra sự cố khi sắp xếp hơn một tỷ tuples trong bộ nhớ (Sergey Koposov)
- Trên Windows, thử tạo lại quy trình nếu chúng tôi không đặt trước phạm vi địa chỉ cho bộ nhớ được chia sẻ của chúng tôi trong quy trình mới (Tom Lane, Amit Kapila)
- Điều này được dự kiến sẽ khắc phục các lỗi thất bại trong quá trình khởi chạy con không thường xuyên có thể do sự can thiệp từ các sản phẩm chống vi-rút.
- Sửa lỗi hỏng hóc có khả năng xảy ra thấp của bảng băm thuộc tính khóa được chia sẻ trong bản dựng Windows (Thomas Munro, Tom Lane)
- Tránh ghi nhật ký việc đóng kết nối SSL một cách sạch sẽ như một thiết lập lại kết nối (Michael Paquier)
- Ngăn gửi vé phiên SSL cho khách hàng (Tom Lane)
- Bản sửa lỗi này ngăn chặn lỗi kết nối lại với mã SSL phía máy khách nhận biết.
- Sửa mã để thiết lập tcp_keepalives_idle trên Solaris (Tom Lane)
- Sửa bộ thu thập thống kê để tôn vinh các thông báo yêu cầu được phát hành ngay sau khi tắt máy chủ và khởi động lại ngay lập tức (Tom Lane)
- Các yêu cầu thống kê được ban hành trong vòng nửa giây sau khi tắt chức năng đăng bài trước đó đã bị bỏ qua một cách hiệu quả.
- Đảm bảo rằng kích thước bộ đệm nhận của bộ thu thập số liệu tối thiểu là 100KB (Tom Lane)
- Điều này làm giảm nguy cơ giảm dữ liệu thống kê trên các nền tảng cũ hơn có kích thước bộ đệm nhận mặc định nhỏ hơn.
- Khắc phục sự cố có thể tạo phân đoạn WAL không hợp lệ khi chế độ chờ được quảng cáo ngay sau khi xử lý bản ghi XLOG_SWITCH WAL (Andres Freund)
- Khắc phục walsender để thoát ngay lập tức khi máy khách yêu cầu tắt máy (Tom Lane)
- Khắc phục sự cố SIGHUP và SIGUSR1 trong các quy trình walsender (Petr Jelinek, Andres Freund)
- Ngăn chặn các tình trạng hoảng loạn do người dùng kích hoạt trong các trạm kiểm soát tắt máy (Andres Freund, Michael Paquier)
- Khắc phục sự cố khởi động lại chậm không cần thiết của các quy trình đánh giá do điều kiện đua trong bưu điện (Tom Lane)
- Khắc phục sự cố rò rỉ các giao dịch con nhỏ bị tràn vào đĩa trong khi giải mã hợp lý (Andres Freund)
- Điều này dẫn đến các tệp tạm thời chiếm quá nhiều dung lượng đĩa.
- Giảm công việc cần thiết để tạo ảnh chụp nhanh trong khi tạo các khe giải mã hợp lý (Andres Freund, Petr Jelinek)
- Thuật toán trước đây vô cùng đắt đỏ trên máy chủ có nhiều giao dịch mở.
- Khắc phục tình trạng cuộc đua có thể trì hoãn vô thời hạn việc tạo các khe giải mã hợp lý (Andres Freund, Petr Jelinek)
- Giảm chi phí trong việc xử lý các sự kiện vô hiệu hóa syscache (Tom Lane)
- Điều này đặc biệt hữu ích cho việc giải mã hợp lý, điều này kích hoạt tính năng vô hiệu hóa bộ nhớ cache thường xuyên.
- Loại bỏ heuristic không chính xác được sử dụng trong một số trường hợp để ước tính tính chọn lọc tham gia dựa trên sự hiện diện của các ràng buộc khóa ngoài (David Rowley)
- Trong một số trường hợp tồn tại một ràng buộc khoá ngoại đa cột nhưng không khớp chính xác với cấu trúc kết nối của truy vấn, người lập kế hoạch sử dụng ước tính phỏng đoán hóa ra không hoạt động tốt chút nào. Hoàn nguyên các trường hợp như vậy theo cách chúng được ước tính trước 9.6.
- Khắc phục các trường hợp trong đó INSERT hoặc UPDATE gán cho nhiều hơn một phần tử của một cột thuộc loại tên miền (Tom Lane)
- Cho phép các chức năng cửa sổ được sử dụng trong các SELECT con nằm trong các đối số của hàm tổng hợp (Tom Lane)
- Đảm bảo rằng mệnh đề CHECK OPTIONS của chế độ xem được thực thi đúng cách khi bảng bên dưới là một bảng ngoại (Etsuro Fujita)
- Trước đây, bản cập nhật có thể được đẩy hoàn toàn vào máy chủ nước ngoài, nhưng cần phải xác minh các điều kiện xem đã bị bỏ sót nếu có.
- Di chuyển các loại mảng được tạo tự động ra khỏi đường trong ALTER ... RENAME (Vik Fearing)
- Trước đây, chúng tôi sẽ đổi tên loại mảng được tạo tự động xung đột trong suốt quá trình CREATE; sửa chữa này mở rộng hành vi đó để đổi tên các hoạt động.
- Sửa con trỏ lơ lửng trong ALTER TABLE khi có nhận xét về ràng buộc thuộc về bảng (David Rowley)
- Áp dụng lại nhận xét cho ràng buộc được xây dựng lại có thể không thành công với thông báo lỗi lạ hoặc thậm chí là lỗi.
- Đảm bảo rằng ALTER USER ... SET chấp nhận tất cả các biến thể cú pháp ALTER ROLE ... SET (Peter Eisentraut)
- Cho phép các ràng buộc KIỂM TRA của bảng ở nước ngoài ban đầu KHÔNG HỢP LỆ (Amit Langote)
- TẠO BẢNG TẠO lặng lẽ giảm các chỉ định KHÔNG CÓ GIÁ TRỊ đối với các ràng buộc CHECK, lý do rằng bảng phải trống nên ràng buộc có thể được xác nhận ngay lập tức. Nhưng điều này là sai đối với CREATE FOREIGN TABLE, không có lý do gì để giả sử rằng bảng bên dưới trống, và thậm chí nếu nó không phải là doanh nghiệp của chúng ta để quyết định rằng ràng buộc có thể được coi là hợp lệ trong tương lai. Bỏ qua phần này & quot; tối ưu hóa & quot; cho các bảng nước ngoài.
- Cập nhật đúng thông tin phụ thuộc khi thay đổi đối số của hàm dữ liệu I / O hoặc kiểu trả về từ mờ thành loại chính xác (Heikki Linnakangas)
- TẠO các cập nhật TYPE I / O được khai báo theo phong cách lỗi thời này, nhưng nó quên ghi phụ thuộc vào loại, cho phép LOẠI LOẠI tiếp theo để lại các định nghĩa hàm bị hỏng sau.
- Cho phép song song trong kế hoạch truy vấn khi sao chép COPY từ kết quả của truy vấn (Andres Freund)
- Giảm mức sử dụng bộ nhớ khi ANALYZE xử lý cột tsvector (Heikki Linnakangas)
- Sửa lỗi mất chính xác không cần thiết và làm tròn cẩu thả khi nhân hoặc chia các giá trị tiền bằng số nguyên hoặc phao nổi (Tom Lane)
- Thắt chặt kiểm tra cho khoảng trắng trong các hàm phân tích cú pháp mã định danh, chẳng hạn như regprocedurein () (Tom Lane)
- Tùy thuộc vào ngôn ngữ hiện hành, các chức năng này có thể hiểu sai các đoạn của các ký tự nhiều byte thành khoảng trắng.
- Sử dụng các ký hiệu #define có liên quan từ Perl trong khi biên dịch PL / Perl (Ashutosh Sharma, Tom Lane)
- Điều này tránh các vấn đề về tính di động, thường biểu hiện dưới dạng & quot; bắt tay & quot; không khớp trong khi tải thư viện, khi làm việc với các phiên bản Perl gần đây.
- Trong libpq, hãy đặt lại trạng thái xác thực GSS / SASL và SSPI đúng sau khi cố gắng kết nối không thành công (Michael Paquier)
- Nếu không làm điều này có nghĩa là khi quay trở lại từ SSL sang các kết nối không phải SSL, lỗi GSS / SASL trong nỗ lực SSL sẽ luôn gây ra lỗi không phải SSL. SSPI không thất bại, nhưng nó bị rò rỉ bộ nhớ.
- Trong psql, sửa lỗi khi COPY FROM STDIN được kết thúc bằng tín hiệu EOF bàn phím và sau đó một COPY FROM STDIN khác đã được thử (Thomas Munro)
- Hành vi sai trái này đã được quan sát trên các nền tảng có nguồn gốc từ BSD (bao gồm cả macOS), nhưng không quan tâm đến hầu hết các nền tảng khác.
- Khắc phục pg_dump và pg_restore để phát ra các lệnh CHẾ ĐỘ XEM LIỆU LẠNH REFRESH cuối cùng (Tom Lane)
- Điều này ngăn lỗi trong quá trình đổ / khôi phục khi chế độ xem được thực hiện đề cập đến các bảng do một người dùng khác sở hữu.
- Cải thiện báo cáo của pg_dump / pg_restore về các điều kiện lỗi có nguồn gốc từ zlib (Vladimir Kunschikov, Alvaro Herrera)
- Khắc phục pg_dump bằng tùy chọn --clean để thả trình kích hoạt sự kiện như mong đợi (Tom Lane)
- Giờ đây, nó cũng chỉ định quyền sở hữu trình kích hoạt sự kiện; trước đó, chúng được khôi phục dưới dạng được sở hữu bởi siêu người dùng chạy tập lệnh khôi phục.
- Khắc phục pg_dump bằng tùy chọn --clean để không thất bại khi lược đồ công khai không tồn tại (Stephen Frost)
- Khắc phục pg_dump để không phát ra SQL không hợp lệ cho một lớp toán tử rỗng (Daniel Gustafsson)
- Khắc phục đầu ra pg_dump thành stdout trên Windows (Kuntal Ghosh)
- Đoạn kết xuất văn bản thuần được nén bằng văn bản thành stdout sẽ chứa dữ liệu bị hỏng do không đưa trình mô tả tệp vào chế độ nhị phân.
- Khắc phục pg_get_ruledef () để in đầu ra chính xác cho quy tắc CHỌN TRÊN của chế độ xem có cột đã được đổi tên (Tom Lane)
- Trong một số trường hợp góc, pg_dump dựa trên pg_get_ruledef () để kết xuất chế độ xem, do đó lỗi này có thể dẫn đến lỗi kết xuất / tải lại.
- Khắc phục sự cố bán phá giá các kết nối bên ngoài với các ràng buộc rỗng, chẳng hạn như kết quả của THIÊN NHIÊN TỰ NHIÊN không có các cột chung (Tom Lane)
- Khắc phục sự cố bán phá giá các biểu thức hàm trong mệnh đề FROM trong trường hợp biểu thức không bị thiếu thành một thứ trông giống như một cuộc gọi hàm (Tom Lane)
- Khắc phục đầu ra pg_basebackup thành stdout trên Windows (Haribabu Kommi)
- Bản sao lưu được ghi bằng lệnh stdout sẽ chứa dữ liệu bị hỏng do không đặt trình mô tả tệp vào chế độ nhị phân.
- Khắc phục pg_rewind để xử lý chính xác các tệp vượt quá 2 GB (Kuntal Ghosh, Michael Paquier)
- Thông thường các tệp như vậy sẽ không xuất hiện trong các thư mục dữ liệu PostgreSQL, nhưng chúng có thể xuất hiện trong một số trường hợp.
- Sửa pg_upgrade để đảm bảo rằng bản ghi kết thúc WAL không có wal_level = minimum (Bruce Momjian)
- Tình trạng này có thể ngăn máy chủ dự phòng được nâng cấp kết nối lại.
- Khắc phục tính toán thời lượng bản ghi WAL của pg_xlogdump (Andres Freund)
- Trong postgres_fdw, thiết lập lại kết nối với máy chủ từ xa sau lệnh ALTER SERVER hoặc ALTER USER MAPPING (Kyotaro Horiguchi)
- Điều này đảm bảo rằng các thay đổi tùy chọn ảnh hưởng đến các thông số kết nối sẽ được áp dụng ngay lập tức.
- Trong postgres_fdw, cho phép hủy các lệnh điều khiển giao dịch từ xa (Robert Haas, Rafia Sabih)
- Thay đổi này cho phép chúng tôi nhanh chóng thoát khỏi sự chờ đợi máy chủ từ xa không phản hồi trong nhiều trường hợp hơn trước đây.
- Tăng MAX_SYSCACHE_CALLBACKS để cung cấp thêm chỗ cho tiện ích mở rộng (Tom Lane)
- Luôn sử dụng -fPIC, không phải hình ảnh, khi xây dựng thư viện được chia sẻ với gcc (Tom Lane)
- Điều này hỗ trợ các thư viện mở rộng lớn hơn trên các nền tảng nơi nó tạo sự khác biệt.
- Trong MSVC xây dựng, xử lý trường hợp thư viện openssl không nằm trong thư mục con VC (Andrew Dunstan)
- Trong bản dựng MSVC, thêm đường dẫn bao gồm thích hợp cho các tệp tiêu đề libxml2 (Andrew Dunstan)
- Điều này khắc phục nhu cầu trước đây để di chuyển mọi thứ xung quanh trong cài đặt Windows chuẩn của libxml2.
- Trong MSVC xây dựng, nhận ra một thư viện Tcl được đặt tên tcl86.lib (Noah Misch)
- Trong MSVC xây dựng, hãy tôn trọng cài đặt PROVE_FLAGS trên dòng lệnh của vcregress.pl (Andrew Dunstan)
Tính năng mới trong phiên bản 9.6.4:
- Hạn chế hơn nữa khả năng hiển thị của pg_user_mappings.umoptions, để bảo vệ mật khẩu được lưu trữ dưới dạng tùy chọn ánh xạ người dùng (Noah Misch)
- Bản sửa lỗi cho CVE-2017-7486 không chính xác: nó cho phép người dùng xem các tùy chọn trong ánh xạ người dùng của riêng mình, ngay cả khi cô ấy không có quyền USAGE trên máy chủ nước ngoài được liên kết. Các tùy chọn này có thể bao gồm mật khẩu do chủ sở hữu máy chủ cung cấp thay vì chính người dùng đó. Vì information_schema.user_mapping_options không hiển thị các tùy chọn trong các trường hợp như vậy, nên pg_user_mappings cũng không nên. (CVE-2017-7547)
- Tự nó, bản vá này sẽ chỉ khắc phục hành vi trong cơ sở dữ liệu mới được initdb'd. Nếu bạn muốn áp dụng thay đổi này trong cơ sở dữ liệu hiện có, bạn sẽ cần thực hiện các thao tác sau:
- Khởi động lại postmaster sau khi thêm allow_system_table_mods = true vào postgresql.conf. (Trong các phiên bản hỗ trợ ALTER SYSTEM, bạn có thể sử dụng nó để thực hiện thay đổi cấu hình, nhưng bạn vẫn cần khởi động lại.)
- Trong mỗi cơ sở dữ liệu của cụm, chạy các lệnh sau làm superuser:
- SET search_path = pg_catalog;
- TẠO XEM HOẶC THAY THẾ pg_user_mappings AS
- CHỌN
- U.oid AS umid,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- TRƯỜNG HỢP KHI U.umuser = 0 THÌ
- 'công khai'
- ELSE
- Tên đăng nhập
- END AS usename,
- TRƯỜNG HỢP KHI NÀO (U.umuser 0 VÀ A.rolname = current_user
- AND (pg_has_role (S.srvowner, 'USAGE')
- OR has_server_privilege (S.oid, 'USAGE')))
- HOẶC (U.umuser = 0 AND pg_has_role (S.srvowner, 'USAGE'))
- HOẶC (CHỌN rolsuper TỪ pg_authid WHERE rolname = current_user)
- THEN U.umoptions
- ELSE NULL END AS sự hiển thị
- TỪ pg_user_mapping U
- LEFT JOIN pg_authid A BẬT (A.oid = U.umuser) THAM GIA
- pg_foreign_server S BẬT (U.umserver = S.oid);
- Đừng quên bao gồm các cơ sở dữ liệu template0 và template1, hoặc lỗ hổng sẽ vẫn tồn tại trong các cơ sở dữ liệu bạn tạo sau này. Để khắc phục template0, bạn sẽ cần phải tạm thời làm cho nó chấp nhận các kết nối. Trong PostgreSQL 9.5 trở lên, bạn có thể sử dụng
- mẫu ALTER DATABASE0 VỚI ALLOW_CONNECTIONS đúng;
- và sau đó sau khi sửa template0, hãy hoàn tác điều đó bằng
- mẫu ALTER DATABASE0 WITH ALLOW_CONNECTIONS sai;
- Trong các phiên bản trước, thay vào đó hãy sử dụng
- CẬP NHẬT pg_database THIẾT LẬP datallowconn = true WHERE datname = 'template0';
- CẬP NHẬT pg_database THIẾT LẬP datallowconn = false WHERE datname = 'template0';
- Cuối cùng, hãy xóa cài đặt cấu hình allow_system_table_mods và khởi động lại trình đăng bài.
- Không cho phép mật khẩu trống trong tất cả các phương thức xác thực dựa trên mật khẩu (Heikki Linnakangas)
- libpq bỏ qua các thông số mật khẩu trống và không truyền chúng đến máy chủ. Vì vậy, nếu mật khẩu của người dùng đã được đặt thành chuỗi trống, bạn không thể đăng nhập bằng mật khẩu đó thông qua psql hoặc các trình khách dựa trên libpq khác. Do đó, quản trị viên có thể tin rằng việc đặt mật khẩu thành trống tương đương với việc tắt đăng nhập mật khẩu. Tuy nhiên, với một khách hàng được sửa đổi hoặc không dựa trên libpq, việc đăng nhập có thể thực hiện được, tùy thuộc vào phương thức xác thực được cấu hình. Cụ thể là phương pháp phổ biến nhất, md5, chấp nhận mật khẩu trống. Thay đổi máy chủ để từ chối mật khẩu trống trong mọi trường hợp. (CVE-2017-7546)
- Hãy lo_put () kiểm tra đặc quyền UPDATE trên đối tượng lớn đích (Tom Lane, Michael Paquier)
- lo_put () chắc chắn sẽ yêu cầu các quyền tương tự như lowrite (), nhưng kiểm tra bị thiếu, cho phép bất kỳ người dùng nào thay đổi dữ liệu trong một đối tượng lớn. (CVE-2017-7548)
- Sửa tài liệu về quy trình nâng cấp máy chủ dự phòng bằng pg_upgrade (Bruce Momjian)
- Tài liệu trước đã hướng dẫn người dùng bắt đầu / dừng máy chủ chính sau khi chạy pg_upgrade nhưng trước khi đồng bộ hóa các máy chủ dự phòng. Chuỗi này không an toàn.
- Khắc phục sự cố đồng thời khóa chuỗi cập nhật tuple (Alvaro Herrera)
- Nếu nhiều phiên đồng thời khóa chuỗi cập nhật tuple với chế độ khóa không xung đột bằng ảnh chụp cũ và tất cả đều thành công, thì có thể một số phiên vẫn thất bại (và kết luận không có phiên bản tuple trực tiếp) do cuộc đua điều kiện. Điều này có hậu quả như kiểm tra khóa ngoài không thấy một bộ dữ liệu chắc chắn tồn tại nhưng đang được cập nhật đồng thời.
- Khắc phục sự cố hỏng dữ liệu tiềm năng khi đóng băng một bộ dữ liệu có XMAX là một phần tử đa với chính xác một thành viên vẫn thú vị (Teodor Sigaev)
- Tránh tràn số nguyên và xảy ra sự cố khi sắp xếp hơn một tỷ tuples trong bộ nhớ (Sergey Koposov)
- Trên Windows, thử tạo lại quy trình nếu chúng tôi không đặt trước phạm vi địa chỉ cho bộ nhớ được chia sẻ của chúng tôi trong quy trình mới (Tom Lane, Amit Kapila)
- Điều này được dự kiến sẽ khắc phục các lỗi thất bại trong quá trình khởi chạy con không thường xuyên có thể do sự can thiệp từ các sản phẩm chống vi-rút.
- Sửa lỗi hỏng hóc có khả năng xảy ra thấp của bảng băm thuộc tính khóa được chia sẻ trong bản dựng Windows (Thomas Munro, Tom Lane)
- Tránh ghi nhật ký việc đóng kết nối SSL một cách sạch sẽ như một thiết lập lại kết nối (Michael Paquier)
- Ngăn gửi vé phiên SSL cho khách hàng (Tom Lane)
- Bản sửa lỗi này ngăn chặn lỗi kết nối lại với mã SSL phía máy khách nhận biết.
- Sửa mã để thiết lập tcp_keepalives_idle trên Solaris (Tom Lane)
- Sửa bộ thu thập thống kê để tôn vinh các thông báo yêu cầu được phát hành ngay sau khi tắt máy chủ và khởi động lại ngay lập tức (Tom Lane)
- Các yêu cầu thống kê được ban hành trong vòng nửa giây sau khi tắt chức năng đăng bài trước đó đã bị bỏ qua một cách hiệu quả.
- Đảm bảo rằng kích thước bộ đệm nhận của bộ thu thập số liệu tối thiểu là 100KB (Tom Lane)
- Điều này làm giảm nguy cơ giảm dữ liệu thống kê trên các nền tảng cũ hơn có kích thước bộ đệm nhận mặc định nhỏ hơn.
- Khắc phục sự cố có thể tạo phân đoạn WAL không hợp lệ khi chế độ chờ được quảng cáo ngay sau khi xử lý bản ghi XLOG_SWITCH WAL (Andres Freund)
- Khắc phục walsender để thoát ngay lập tức khi máy khách yêu cầu tắt máy (Tom Lane)
- Khắc phục sự cố SIGHUP và SIGUSR1 trong các quy trình walsender (Petr Jelinek, Andres Freund)
- Ngăn chặn các tình trạng hoảng loạn do người dùng kích hoạt trong các trạm kiểm soát tắt máy (Andres Freund, Michael Paquier)
- Khắc phục sự cố khởi động lại chậm không cần thiết của các quy trình đánh giá do điều kiện đua trong bưu điện (Tom Lane)
- Khắc phục sự cố rò rỉ các giao dịch con nhỏ bị tràn vào đĩa trong khi giải mã hợp lý (Andres Freund)
- Điều này dẫn đến các tệp tạm thời chiếm quá nhiều dung lượng đĩa.
- Giảm công việc cần thiết để tạo ảnh chụp nhanh trong khi tạo các khe giải mã hợp lý (Andres Freund, Petr Jelinek)
- Thuật toán trước đây vô cùng đắt đỏ trên máy chủ có nhiều giao dịch mở.
- Khắc phục tình trạng cuộc đua có thể trì hoãn vô thời hạn việc tạo các khe giải mã hợp lý (Andres Freund, Petr Jelinek)
- Giảm chi phí trong việc xử lý các sự kiện vô hiệu hóa syscache (Tom Lane)
- Điều này đặc biệt hữu ích cho việc giải mã hợp lý, điều này kích hoạt tính năng vô hiệu hóa bộ nhớ cache thường xuyên.
- Loại bỏ heuristic không chính xác được sử dụng trong một số trường hợp để ước tính tính chọn lọc tham gia dựa trên sự hiện diện của các ràng buộc khóa ngoài (David Rowley)
- Trong một số trường hợp tồn tại một ràng buộc khoá ngoại đa cột nhưng không khớp chính xác với cấu trúc kết nối của truy vấn, người lập kế hoạch sử dụng ước tính phỏng đoán hóa ra không hoạt động tốt chút nào. Hoàn nguyên các trường hợp như vậy theo cách chúng được ước tính trước 9.6.
- Khắc phục các trường hợp trong đó INSERT hoặc UPDATE gán cho nhiều hơn một phần tử của một cột thuộc loại tên miền (Tom Lane)
- Cho phép các chức năng cửa sổ được sử dụng trong các SELECT con nằm trong các đối số của hàm tổng hợp (Tom Lane)
- Đảm bảo rằng mệnh đề CHECK OPTIONS của chế độ xem được thực thi đúng cách khi bảng bên dưới là một bảng ngoại (Etsuro Fujita)
- Trước đây, bản cập nhật có thể được đẩy hoàn toàn vào máy chủ nước ngoài, nhưng cần phải xác minh các điều kiện xem đã bị bỏ sót nếu có.
- Di chuyển các loại mảng được tạo tự động ra khỏi đường trong ALTER ... RENAME (Vik Fearing)
- Trước đây, chúng tôi sẽ đổi tên loại mảng được tạo tự động xung đột trong suốt quá trình CREATE; sửa chữa này mở rộng hành vi đó để đổi tên các hoạt động.
- Sửa con trỏ lơ lửng trong ALTER TABLE khi có nhận xét về ràng buộc thuộc về bảng (David Rowley)
- Áp dụng lại nhận xét cho ràng buộc được xây dựng lại có thể không thành công với thông báo lỗi lạ hoặc thậm chí là lỗi.
- Đảm bảo rằng ALTER USER ... SET chấp nhận tất cả các biến thể cú pháp ALTER ROLE ... SET (Peter Eisentraut)
- Cho phép các ràng buộc KIỂM TRA của bảng ở nước ngoài ban đầu KHÔNG HỢP LỆ (Amit Langote)
- TẠO BẢNG TẠO lặng lẽ giảm các chỉ định KHÔNG CÓ GIÁ TRỊ đối với các ràng buộc CHECK, lý do rằng bảng phải trống nên ràng buộc có thể được xác nhận ngay lập tức. Nhưng điều này là sai đối với CREATE FOREIGN TABLE, không có lý do gì để giả sử rằng bảng bên dưới trống, và thậm chí nếu nó không phải là doanh nghiệp của chúng ta để quyết định rằng ràng buộc có thể được coi là hợp lệ trong tương lai. Bỏ qua "tối ưu hóa" này cho các bảng nước ngoài.
- Cập nhật đúng thông tin phụ thuộc khi thay đổi đối số của hàm dữ liệu I / O hoặc kiểu trả về từ mờ thành loại chính xác (Heikki Linnakangas)
- TẠO các cập nhật TYPE I / O được khai báo theo phong cách lỗi thời này, nhưng nó quên ghi phụ thuộc vào loại, cho phép LOẠI LOẠI tiếp theo để lại các định nghĩa hàm bị hỏng sau.
- Cho phép song song trong kế hoạch truy vấn khi sao chép COPY từ kết quả của truy vấn (Andres Freund)
- Giảm mức sử dụng bộ nhớ khi ANALYZE xử lý cột tsvector (Heikki Linnakangas)
- Sửa lỗi mất chính xác không cần thiết và làm tròn cẩu thả khi nhân hoặc chia các giá trị tiền bằng số nguyên hoặc phao nổi (Tom Lane)
- Thắt chặt kiểm tra cho khoảng trắng trong các hàm phân tích cú pháp mã định danh, chẳng hạn như regprocedurein () (Tom Lane)
- Tùy thuộc vào ngôn ngữ hiện hành, các chức năng này có thể hiểu sai các đoạn của các ký tự nhiều byte thành khoảng trắng.
- Sử dụng các ký hiệu #define có liên quan từ Perl trong khi biên dịch PL / Perl (Ashutosh Sharma, Tom Lane)
- Điều này tránh các vấn đề về tính di động, thường biểu hiện dưới dạng "bắt tay" không khớp trong khi tải thư viện, khi làm việc với các phiên bản Perl gần đây.
- Trong libpq, hãy đặt lại trạng thái xác thực GSS / SASL và SSPI đúng sau khi cố gắng kết nối không thành công (Michael Paquier)
- Nếu không làm điều này có nghĩa là khi quay trở lại từ SSL sang các kết nối không phải SSL, lỗi GSS / SASL trong nỗ lực SSL sẽ luôn gây ra lỗi không phải SSL. SSPI không thất bại, nhưng nó bị rò rỉ bộ nhớ.
- Trong psql, sửa lỗi khi COPY FROM STDIN được kết thúc bằng tín hiệu EOF bàn phím và sau đó một COPY FROM STDIN khác đã được thử (Thomas Munro)
- Hành vi sai trái này đã được quan sát trên các nền tảng có nguồn gốc từ BSD (bao gồm cả macOS), nhưng không quan tâm đến hầu hết các nền tảng khác.
- Khắc phục pg_dump và pg_restore để phát ra các lệnh CHẾ ĐỘ XEM LIỆU LẠNH REFRESH cuối cùng (Tom Lane)
- Điều này ngăn lỗi trong quá trình đổ / khôi phục khi chế độ xem được thực hiện đề cập đến các bảng do một người dùng khác sở hữu.
- Cải thiện báo cáo của pg_dump / pg_restore về các điều kiện lỗi có nguồn gốc từ zlib (Vladimir Kunschikov, Alvaro Herrera)
- Khắc phục pg_dump bằng tùy chọn --clean để thả trình kích hoạt sự kiện như mong đợi (Tom Lane)
- Giờ đây, nó cũng chỉ định quyền sở hữu trình kích hoạt sự kiện; trước đó, chúng được khôi phục dưới dạng được sở hữu bởi siêu người dùng chạy tập lệnh khôi phục.
- Khắc phục pg_dump bằng tùy chọn --clean để không thất bại khi lược đồ công khai không tồn tại (Stephen Frost)
- Khắc phục pg_dump để không phát ra SQL không hợp lệ cho một lớp toán tử rỗng (Daniel Gustafsson)
- Khắc phục đầu ra pg_dump thành stdout trên Windows (Kuntal Ghosh)
- Đoạn kết xuất văn bản thuần được nén bằng văn bản thành stdout sẽ chứa dữ liệu bị hỏng do không đưa trình mô tả tệp vào chế độ nhị phân.
- Khắc phục pg_get_ruledef () để in đầu ra chính xác cho quy tắc CHỌN TRÊN của chế độ xem có cột đã được đổi tên (Tom Lane)
- Trong một số trường hợp góc, pg_dump dựa trên pg_get_ruledef () để kết xuất chế độ xem, do đó lỗi này có thể dẫn đến lỗi kết xuất / tải lại.
- Khắc phục sự cố bán phá giá các kết nối bên ngoài với các ràng buộc rỗng, chẳng hạn như kết quả của THIÊN NHIÊN TỰ NHIÊN không có các cột chung (Tom Lane)
- Khắc phục sự cố bán phá giá các biểu thức hàm trong mệnh đề FROM trong trường hợp biểu thức không bị thiếu thành một thứ trông giống như một cuộc gọi hàm (Tom Lane)
- Khắc phục đầu ra pg_basebackup thành stdout trên Windows (Haribabu Kommi)
- Bản sao lưu được ghi bằng lệnh stdout sẽ chứa dữ liệu bị hỏng do không đặt trình mô tả tệp vào chế độ nhị phân.
- Khắc phục pg_rewind để xử lý chính xác các tệp vượt quá 2 GB (Kuntal Ghosh, Michael Paquier)
- Thông thường các tệp như vậy sẽ không xuất hiện trong các thư mục dữ liệu PostgreSQL, nhưng chúng có thể xuất hiện trong một số trường hợp.
- Sửa pg_upgrade để đảm bảo rằng bản ghi kết thúc WAL không có wal_level = minimum (Bruce Momjian)
- Tình trạng này có thể ngăn máy chủ dự phòng được nâng cấp kết nối lại.
- Khắc phục tính toán thời lượng bản ghi WAL của pg_xlogdump (Andres Freund)
- Trong postgres_fdw, thiết lập lại kết nối với máy chủ từ xa sau lệnh ALTER SERVER hoặc ALTER USER MAPPING (Kyotaro Horiguchi)
- Điều này đảm bảo rằng các thay đổi tùy chọn ảnh hưởng đến các thông số kết nối sẽ được áp dụng ngay lập tức.
- Trong postgres_fdw, cho phép hủy các lệnh điều khiển giao dịch từ xa (Robert Haas, Rafia Sabih)
- Thay đổi này cho phép chúng tôi nhanh chóng thoát khỏi sự chờ đợi máy chủ từ xa không phản hồi trong nhiều trường hợp hơn trước đây.
- Tăng MAX_SYSCACHE_CALLBACKS để cung cấp thêm chỗ cho tiện ích mở rộng (Tom Lane)
- Luôn sử dụng -fPIC, không phải hình ảnh, khi xây dựng thư viện được chia sẻ với gcc (Tom Lane)
- Điều này hỗ trợ các thư viện mở rộng lớn hơn trên các nền tảng nơi nó tạo sự khác biệt.
- Trong MSVC xây dựng, xử lý trường hợp thư viện openssl không nằm trong thư mục con VC (Andrew Dunstan)
- Trong bản dựng MSVC, thêm đường dẫn bao gồm thích hợp cho các tệp tiêu đề libxml2 (Andrew Dunstan)
- Điều này khắc phục nhu cầu trước đây để di chuyển mọi thứ xung quanh trong cài đặt Windows chuẩn của libxml2.
- Trong MSVC xây dựng, nhận ra một thư viện Tcl được đặt tên tcl86.lib (Noah Misch)
- Trong MSVC xây dựng, hãy tôn trọng cài đặt PROVE_FLAGS trên dòng lệnh của vcregress.pl (Andrew Dunstan)
Bình luận không