Cơ sở dữ liệu Nga postgres pro. Cơ sở hạ tầng tính toán song song trong PostgreSQL. So sánh các phiên bản PostgreSQL

  • Ngôn ngữ kịch bản- PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl và PL/Scheme;
  • Ngôn ngữ cổ điển - C, C++, Java (thông qua mô-đun PL/Java);
  • Ngôn ngữ thống kê R (thông qua mô-đun PL/R).
  • PostgreSQL cho phép sử dụng các hàm trả về một tập hợp các bản ghi, sau đó có thể được sử dụng theo cách tương tự như kết quả của một truy vấn thông thường.

    Các chức năng có thể được thực thi với cả quyền của người tạo ra chúng và quyền của người dùng hiện tại. Các hàm đôi khi được xác định bằng các thủ tục lưu trữ, nhưng có sự khác biệt giữa hai khái niệm này.

    Gây nên

    Trình kích hoạt được định nghĩa là các chức năng được khởi tạo bởi các hoạt động DML. Ví dụ: thao tác INSERT có thể kích hoạt trình kích hoạt để kiểm tra bản ghi đã thêm để xem liệu nó có đáp ứng các điều kiện nhất định hay không. Khi viết hàm cho trình kích hoạt, có thể sử dụng nhiều ngôn ngữ lập trình khác nhau.

    Trình kích hoạt được liên kết với các bảng. Nhiều trigger được thực thi theo thứ tự bảng chữ cái.

    Quy tắc và quan điểm

    Công cụ quy tắc là một cơ chế để tạo các trình xử lý tùy chỉnh không chỉ cho các hoạt động DML mà còn cho các hoạt động lấy mẫu. Sự khác biệt chính so với cơ chế kích hoạt là các quy tắc được kích hoạt ở giai đoạn phân tích yêu cầu, trước khi chọn kế hoạch thực hiện tối ưu và chính quy trình thực hiện. Các quy tắc cho phép bạn ghi đè hành vi của hệ thống khi thực hiện thao tác SQL trên bảng. Một ví dụ tốt là việc triển khai cơ chế khung nhìn: khi một khung nhìn được tạo, một quy tắc được tạo để chỉ định rằng thay vì thực hiện thao tác chọn trên khung nhìn, hệ thống phải thực hiện thao tác chọn trên bảng/bảng cơ sở, có tính đến việc lựa chọn điều kiện cơ bản của định nghĩa khung nhìn. Để tạo các dạng xem hỗ trợ các thao tác cập nhật, người dùng phải xác định các quy tắc cho các thao tác chèn, sửa đổi và xóa hàng.

    Chỉ mục

    PostgreSQL có hỗ trợ cho các chỉ mục các loại sau: Cây B, hàm băm, cây R, GiST, GIN. Các loại chỉ mục mới có thể được tạo nếu cần thiết, mặc dù đây không phải là một quy trình tầm thường. Các chỉ mục trong PostgreSQL có các thuộc tính sau:

    • có thể xem chỉ mục không chỉ theo trực tiếp mà còn theo thứ tự ngược lại - tạo một chỉ mục riêng cho hoạt động của ORDER BY ... Việc xây dựng DESC là không cần thiết;
    • có thể tạo chỉ mục trên một số cột trong bảng, bao gồm các cột có nhiều kiểu dữ liệu khác nhau;
    • các chỉ mục có thể mang tính chức năng, nghĩa là được xây dựng không dựa trên tập hợp các giá trị của một cột/cột nhất định mà trên cơ sở tập hợp các giá trị của hàm của một tập hợp các giá trị;
    • các chỉ mục có thể là một phần, nghĩa là chỉ được xây dựng trên một phần của bảng (trên một số hình chiếu của nó); trong một số trường hợp, điều này giúp tạo ra các chỉ mục nhỏ gọn hơn nhiều hoặc đạt được những cải tiến về hiệu suất bằng cách sử dụng các loại khác nhau chỉ mục cho các phần khác nhau (ví dụ: về tần suất cập nhật) của bảng;
    • Trình lập kế hoạch truy vấn có thể sử dụng đồng thời nhiều chỉ mục để chạy các truy vấn phức tạp.

    Đa phiên bản (MVCC)

    PostgreSQL hỗ trợ sửa đổi cơ sở dữ liệu đồng thời bởi nhiều người dùng bằng cơ chế Kiểm soát đồng thời đa phiên bản (MVCC). Điều này đảm bảo tuân thủ ACID và hầu như loại bỏ nhu cầu về khóa đọc.

    Tìm kiếm toàn văn

    PostgreSQL có một hệ thống tích hợp tìm kiếm toàn văn, cho phép bạn tìm kiếm tài liệu trong cơ sở dữ liệu và sắp xếp chúng theo thứ tự nhất định. Ưu điểm chính của việc sử dụng tìm kiếm toàn văn bản tích hợp sẵn là: tích hợp chặt chẽ với DBMS (giao dịch, truy cập đồng thời, phục hồi lỗi), khả năng mở rộng, nhiều cơ hội cài đặt (từ điển, trình phân tích cú pháp, v.v.).

    Hệ thống thông tin địa lý

    PostGIS là phần mở rộng của PostgreSQL DBMS được thiết kế để lưu trữ dữ liệu địa lý trong cơ sở dữ liệu. PostGIS bao gồm hỗ trợ cho các chỉ mục không gian R-Tree/GiST và các chức năng xử lý dữ liệu địa lý.

    2019: Tương thích với TerraLink xDE

    2018

    Đưa người đồng sáng lập Postgres Professional Alexander Korotkov vào danh sách những người cam kết PostgreSQL DBMS

    Vào tháng 6 năm 2018, danh sách những người cam kết (các nhà phát triển đóng góp vào việc phát triển mã) của DBMS PostgreSQL đã được bổ sung thêm một người Nga thứ ba. Danh sách các thành viên chính của hạt nhân PostgreSQL, đồng sáng lập và giám đốc phát triển của công ty Postgres Professional của Nga.

    2017

    Tài liệu cho phiên bản 10 được bản địa hóa cho Nga

    Những đổi mới chính:

    • Sao chép logic: Các phần của cơ chế này đã được thêm vào PostgreSQL từ khá lâu và trong phiên bản này, tính năng sao chép logic đã hoàn toàn có sẵn cho người dùng. Với sự trợ giúp của nó, bạn có thể sao chép có chọn lọc các bảng riêng lẻ sang một máy chủ khác, sau đó máy chủ này có thể thực hiện cả truy vấn đọc và ghi. Các máy chủ tham gia sao chép có thể chạy dưới phiên bản khác nhau PostgreSQL, cho phép bạn cập nhật cụm từ thời gian tối thiểu chỉ mình tôi.
    • Phân vùng khai báo giúp quản trị viên giảm bớt nhu cầu xác định hệ thống phân cấp bảng theo cách thủ công, tạo trình kích hoạt và ràng buộc toàn vẹn.
    • Thực thi truy vấn song song Có thể quét bitmap và chỉ mục, hợp nhất các phép nối và truy vấn con ngoài các khả năng đã xuất hiện trong phiên bản trước.
    • Sao chép nhận thức đại biểu đồng bộ cho phép bạn ghi lại các thay đổi nếu chúng đã được xác nhận bằng số lượng bản sao ngẫu nhiên cần thiết.
    • Xác thực SCRAM là phiên bản chống mật mã tốt hơn của xác thực MD5 đã sử dụng trước đó.

    Tổng cộng, theo các nhà phát triển, phiên bản 10 bao gồm hơn 100 thay đổi và cải tiến, một số trong số đó được thực hiện bởi Postgres Professional.

    Tích hợp Ethereum

    Ngày 14 tháng 9 năm 2017 công ty Nga Postgres Professional đã công bố việc tạo ra một nguyên mẫu của tiện ích mở rộng Postthereum để tích hợp DBMS PostgreSQL đầy đủ tính năng với nền tảng blockchain được thiết kế để đăng ký giao dịch với bất kỳ loại tài sản nào dựa trên hệ thống “hợp đồng thông minh”. Theo kế hoạch của công ty, lớn ngân hàng Nga, các tập đoàn và cơ quan chính phủ làm việc với Cơ sở dữ liệu PostgreSQL, với sự trợ giúp của sự phát triển này sẽ có thể kết hợp cơ sở dữ liệu với các ứng dụng blockchain dựa trên Ethereum. Đọc thêm.

    2016

    PostgreSQL 9.6

    Vào ngày 29 tháng 9 năm 2016, cộng đồng nhà phát triển đã giới thiệu nhánh ổn định của DBMS PostgreSQL 9.6. Các bản cập nhật cho phiên bản 9.6 sẽ được phát hành trong vòng 5 năm, cho đến tháng 9 năm 2021.

    Bổ sung chính

    So sánh Tibero và PostgreSQL

    Bản phát hành khắc phục của tất cả các chi nhánh

    Vào ngày 11 tháng 2 năm 2016, cộng đồng nhà phát triển PostgreSQL đã công bố phát hành bản cập nhật khắc phục cho tất cả các nhánh PostgreSQL được hỗ trợ: 9.5.1, 9.4.6, 9.3.11, 9.2.15 và 9.1.20, loại bỏ hai lỗ hổng, giới thiệu một phần sửa lỗi, bổ sung hỗ trợ cho Python 3.5 trong PL/Python và khả năng chia sẻ Python2 và Python3 trong một cơ sở dữ liệu.

    Nhánh 9.0.x đã ngừng hoạt động. Phát hành bản cập nhật cho chi nhánh:

    • 9.1 kéo dài đến tháng 9 năm 2016.
    • 9.2 kéo dài đến tháng 9 năm 2017,
    • 9.3 kéo dài đến tháng 9 năm 2018,
    • 9.4 kéo dài đến tháng 12 năm 2019,
    • 9.5 kéo dài đến tháng 1 năm 2021.

    Lỗ hổng đầu tiên (CVE-2016-0773) xuất hiện trong công cụ xử lý biểu thức chính quy và có thể khiến phần phụ trợ gặp sự cố khi phân tích cú pháp các biểu thức chính quy có các ký tự nằm ngoài phạm vi Unicode (sự cố ảnh hưởng đến các hệ thống sử dụng dữ liệu đầu vào của người dùng để tạo biểu thức chính quy).

    Lỗ hổng thứ hai (CVE-2016-0766) hiện diện trong công cụ PL/Java và cho phép bạn tăng đặc quyền khi làm việc với cơ sở dữ liệu.

    PostgreSQL 9.5

    Vào ngày 7 tháng 1 năm 2016, người ta biết về việc phát hành một nhánh ổn định của DBMS PostgreSQL 9.5. Việc phát hành bản cập nhật cho nhánh 9.5 sẽ được hỗ trợ cho đến tháng 1 năm 2021.

    Thay đổi

    • Chức năng "UPSERT" (thêm hoặc sửa đổi), được triển khai thông qua biểu thức "INSERT ... ON CONFLICT DO NOTHING/UPDATE" mới, cho phép bạn xử lý tình huống khi dữ liệu không thể được thêm thông qua "INSERT", chẳng hạn như do vi phạm các giá trị điều kiện duy nhất hoặc không hợp lệ của một trong các trường. Thay vì đưa ra lỗi, giờ đây bạn có thể bỏ qua việc thực thi câu lệnh hoặc thay đổi dữ liệu được liên kết với trường khóa (tức là nếu bản ghi đã tồn tại, hãy thực hiện CẬP NHẬT thay vì CHÈN);
    • Hạn chế truy cập ở cấp hàng (Bảo mật cấp hàng, RLS). Giờ đây, quyền truy cập của người dùng vào dữ liệu trong bảng có thể bị hạn chế ở cấp độ của từng hàng riêng lẻ; ví dụ: bạn có thể cấm một danh mục người dùng nhất định xem các hàng lưu trữ dữ liệu do người dùng khác thêm vào. Để kích hoạt RLS, bạn nên sử dụng chỉ thị "ALTER TABLE tablename ENABLE ROW LEVEL SECURITY", sau đó bạn nên đặt quy tắc truy cập bằng cách sử dụng biểu thức "TẠO CHÍNH SÁCH";
    • Chỉ mục BRIN ("chỉ mục phạm vi khối") cho phép lập chỉ mục cực kỳ nhỏ gọn cho các bảng rất lớn mà không cần sử dụng cây B truyền thống. Bản chất của chỉ mục BRIN là chia chỉ mục tổng thể thành các khối, mỗi khối chỉ chứa dữ liệu chỉ mục cho một phạm vi giá trị nhất định. Trong thử nghiệm, một phương pháp tương tự tỏ ra chậm hơn khoảng hai lần so với cây b khi thực hiện các thao tác truy xuất dữ liệu, nhưng nhanh hơn 3-4 lần khi tạo và cập nhật chỉ mục, đồng thời cũng chiếm ít dung lượng ổ đĩa hơn đáng kể (64 KB so với 28 MB);
    • Các hàm và toán tử mới cho kiểu dữ liệu JSONB. Để thay đổi giá trị trong tài liệu JSONB, giờ đây bạn có thể tránh truy xuất và xác định lại toàn bộ tài liệu bằng cách giới thiệu hàm jsonb_set(). Ngoài ra còn có các hàm json_strip_nulls (xóa các thuộc tính chứa giá trị NULL) và jsonb_pretty (đầu ra ở định dạng JSON). Đã thêm toán tử "||" để nối hai giá trị JSONB;
    • Công cụ pg_rewind cho phép bạn đơn giản hóa đáng kể quá trình khôi phục cấu hình có khả năng chịu lỗi sau khi chuyển sang máy chủ dự phòng. Sau khi máy chủ chính hoạt động trở lại, nhiệm vụ phát sinh là đồng bộ hóa trạng thái của nó với máy chủ dự phòng, máy chủ này vẫn tiếp tục hoạt động và đã cố gắng tích lũy phần thay đổi của mình. Tiện ích pg_rewind cố gắng khôi phục trạng thái của máy chủ chính từ nhật ký giao dịch WAL, xem xét chúng bắt đầu từ thời điểm ngay trước khi xảy ra lỗi, xác định dữ liệu đã thay đổi và chỉ truyền các khối đã thay đổi, cho phép bạn thực hiện mà không cần khôi phục toàn bộ sao chép từ một máy chủ dự phòng đang hoạt động.
    • Tốc độ băm và sắp xếp trong bộ nhớ được tối ưu hóa đáng kể. Nhờ sử dụng phương pháp mới để sắp xếp các giá trị chuỗi và số, có thể tăng tốc độ tạo chỉ mục lên tới 20 lần và thời gian thực hiện các truy vấn yêu cầu sắp xếp khối lượng dữ liệu lớn đã giảm đi 2- 12 lần;
    • Đã thêm hỗ trợ cho biểu thức TABLESAMPLE, cho phép bạn tạo mẫu trên lượng dữ liệu không đầy đủ từ các bảng lớn mà không cần thực hiện các thao tác sắp xếp tiêu tốn nhiều tài nguyên trên toàn bộ bảng. Ví dụ: truy vấn "SELECT * FROM test TABLESAMPLE SYSTEM(10)" sẽ tạo ra kết quả chỉ chiếm 10% bảng thử nghiệm. Một số thuật toán có sẵn để loại bỏ các giá trị trong quá trình lấy mẫu dưới mức;
    • Cải thiện khả năng mở rộng quy mô trên các hệ thống với một lượng lớn lõi xử lý và RAM. Ví dụ: trên hệ thống có 24 lõi CPU và 496 GB RAM trong thử nghiệm EnterpriseDB dưới tải 64 kết nối đồng thời, PostgreSQL 9.5 cho thấy hiệu suất tăng 96% so với PostgreSQL 9.4;
    • Tự động quản lý kích thước nhật ký giao dịch. Khả năng loại trừ các bảng khỏi được phản ánh trong nhật ký giao dịch (ALTER TABLE ... SET LOGGED / UNLOGGED);
    • Khả năng phân tích "BỘ NHÓM", "CUBE" và "ROLLUP", cho phép bạn tạo đầu ra được nhóm theo một tập hợp các trường và tính toán số lượng kết hợp của các danh mục khác nhau;
    • Cải thiện khả năng nhân rộng và cải thiện khả năng chịu lỗi. Một cơ chế đã được thêm vào để theo dõi trạng thái thực hiện sao chép, bao gồm các phương pháp xác định nguyên nhân của các thay đổi riêng lẻ trong quá trình sao chép logic;
    • Nhiều cải tiến đã được thực hiện cho công cụ Trình bao bọc dữ liệu nước ngoài, bao gồm câu lệnh "NHẬP Lược đồ nước ngoài", cho phép bạn tự động hóa việc nhập tất cả các bảng nước ngoài có liên quan cho bảng hiện có với nhãn máy chủ đã chọn. Ngoài ra còn có thể kế thừa các bảng bên ngoài từ các bảng cục bộ và ngược lại, ví dụ: “CREATE local_customers() kế thừa (remote.customers);”
    • Tùy chọn "-j" đã được thêm vào tiện ích Vacuumdb, cho phép bạn chạy VACUUM trong nhiều luồng đồng thời.

    2015

    Cơ sở hạ tầng tính toán song song trong PostgreSQL

    Vào ngày 4 tháng 5 năm 2015, người ta biết rằng đã có những thay đổi đối với cây nguồn của Cơ sở dữ liệu PostgreSQL với việc triển khai cơ sở hạ tầng cho tính toán song song.

    Nó cung cấp:

    • Thủ tục thuận tiện cho việc điều phối khởi động và tắt các quy trình làm việc đồng thời;
    • Đồng bộ hóa các trạng thái nội bộ khác nhau (GUC, ánh xạ CID kết hợp, ảnh chụp nhanh giao dịch) giữa người đứng đầu nhóm công trình song song và quy trình làm việc song song trực tiếp;
    • Hạn chế cuộc gọi hoạt động khác nhau, điều này có thể dẫn đến những thay đổi không chính xác được thực hiện trong điều kiện song song hóa tích cực;
    • Gửi thông báo đến máy khách thông qua các tin nhắn ErrorResponse, NoticeResponse và NotifyResponse từ các trình xử lý chạy song song.

    Postgres-XL trên EcoServer - giải pháp thay thế cho trung tâm dữ liệu

    Vào ngày 13 tháng 8 năm 2015, người ta biết rằng việc thử nghiệm hệ thống quản lý cơ sở dữ liệu Postgres-XL trên các máy chủ của dòng EcoServer đã hoàn tất.

    Việc thử nghiệm được thực hiện nhằm giám sát các công nghệ mới và thực hiện kế hoạch phát triển công nghệ năm 2015.

    Andrey Chernogorov, CEO“Indigo IT” lưu ý: “Ngày nay DBMS phổ biến nhất trên thị trường CNTT là MS SQL và Oracle DataBase. Đồng thời, theo một số khả năng chính chúng không hề thua kém chúng, và ở một số nơi thậm chí còn vượt trội hơn so với DBMS PostgreSQL nguồn mở, mở ra triển vọng rộng lớn cho việc sử dụng nó như một phần của chương trình thay thế nhập khẩu.”

    Để thử nghiệm, các chuyên gia của công ty đã chuẩn bị các bộ dữ liệu thử nghiệm giống hệt nhau cho tất cả các DBMS. Đối tượng thử nghiệm là cơ sở dữ liệu 1 TB bao gồm 1 triệu đối tượng kinh doanh. Thời gian thử nghiệm cho mỗi DBMS là 10 giờ.

    Nó có sự tham dự của phiên bản mới nhất DBMS được khách hàng Indigo IT yêu cầu nhiều nhất:

    • mở DBMS PostgreSQL 9.4.

    Tổng cộng có 5 bộ thử nghiệm đã được thực hiện:

    • tạo ra các tài liệu có cấu trúc phức tạp,
    • cập nhật các tài liệu có cấu trúc phức tạp,
    • tìm kiếm tài liệu,
    • ghi một tập tin vào cơ sở dữ liệu,
    • lấy một tập tin từ cơ sở dữ liệu.

    Kết quả khảo nghiệm, 2015

    Thời gian dành cho mỗi bộ kiểm tra được chỉ ra trong bảng có nghĩa là giá trị trung bình trên tất cả các bộ (ms). Thử nghiệm được thực hiện trên các máy chủ có bộ xử lý Intel Xeon E5 v3 với RAM 128 GB.

    Kết quả là kiểm tra tải trên hai trong số năm bộ thử nghiệm (tạo tài liệu có cấu trúc phức tạp, cập nhật tài liệu có cấu trúc phức tạp), PostgreSQL 9.4 cho thấy kết quả tốt hơn gần ba lần so với các đối thủ cạnh tranh. Ở các thử nghiệm còn lại (tìm kiếm tài liệu, ghi và truy xuất file từ cơ sở dữ liệu), những người tham gia thử nghiệm đều cho kết quả gần như giống hệt nhau.

    Phiên bản này của PostgreSQL DBMS mã nguồn mở hỗ trợ định dạng trao đổi dữ liệu JSON được sử dụng rộng rãi và nhắm đến thị trường đang phát triển cho các kho lưu trữ dữ liệu phi quan hệ NoSQL và đặc biệt là DBMS MongoDB phổ biến.

    Phiên bản beta đầu tiên của PostgreSQL 9.4 giới thiệu một số tính năng mới nhằm vào thị trường ứng dụng web đang mở rộng nhanh chóng, nhiều tính năng trong số đó yêu cầu lưu trữ nhanh và truy xuất khối lượng lớn dữ liệu người dùng.

    Phiên bản PostgreSQL 9.4 hỗ trợ định dạng JSON (JavaScript Simple Object Notation), định dạng này nhanh chóng trở nên phổ biến khi tổ chức trao đổi dữ liệu giữa các hệ thống khác nhau, bao gồm cả việc sử dụng giao thức REST (Chuyển giao trạng thái đại diện). Sự thành công của DBMS tài liệu MongoDB phần lớn là do sự phổ biến ngày càng tăng của JSON.

    Định dạng có cấu trúc của PostgreSQL để lưu trữ dữ liệu theo thông số kỹ thuật JSON (JSONB) giúp loại bỏ nhu cầu cơ cấu lại tài liệu trước khi nhập vào cơ sở dữ liệu. Do đó, PostgreSQL nhập tài liệu nhanh như MongoDB, đồng thời tiếp tục đáp ứng các yêu cầu ACID (tính nguyên tử, tính nhất quán, tính cách ly, độ bền) để lưu trữ thông tin trong cơ sở dữ liệu. Ngoài ra, PostgreSQL hỗ trợ trọn bộ lập chỉ mục các dịch vụ, hàm và toán tử để thao tác dữ liệu JSON một cách hiệu quả.

    Các phiên bản trước của PostgreSQL cũng hỗ trợ JSON, nhưng các tài liệu JSON được lưu trữ ở định dạng văn bản, do đó thao tác ghi và truy xuất chúng mất nhiều thời gian hơn.

    PostgreSQL đã nhận được một số tính năng mới:

    • API mới để giải mã dữ liệu từ luồng sao chép mở đường cho các nhà phát triển phần mềm độc lập xây dựng hệ thống sao chép nhanh hơn.
    • Một tính năng mới trong Chế độ xem cụ thể hóa được gọi là “làm mới đồng thời” cho phép cập nhật nhanh chóng các báo cáo tóm tắt.
    • Tính năng Alter System Set sẽ giúp quản trị viên sửa đổi tệp cấu hình PostgreSQL trực tiếp từ dòng lệnh SQL.

    Một số chức năng và khả năng đã được thêm vào, bao gồm Dynamic Background Workers, thao tác mảng và chức năng bảng, năng suất tổng thể đã được tăng lên.

    PostgreSQL 9.3

    PostgreSQL 9.3 triển khai một số cơ chế cho phép bạn trao đổi thông tin với các cơ sở dữ liệu và kho dữ liệu khác. Các mô-đun Trình bao bọc dữ liệu nước ngoài, xuất hiện trong phiên bản 9.1 và trước đây chỉ cho phép đọc dữ liệu từ các hệ thống khác, giờ đây đã cung cấp khả năng ghi. Nó hỗ trợ làm việc với cả bảng quan hệ và thông tin bán cấu trúc từ hệ thống NoSQL. Một trình điều khiển cũng đã được tạo cho DBMS, cho phép bạn kết nối hai bản sao PostgreSQL khác nhau với nhau và đảm bảo thực hiện nhanh các giao dịch giữa chúng.

    Các tính năng khác bao gồm hỗ trợ JSON nâng cao và khả năng tạo các mô-đun máy chủ nền tùy ý với quyền truy cập không giới hạn vào dữ liệu PostgreSQL. Một ví dụ là mô-đun Mongres, mô-đun này tự động dịch các truy vấn MongoDB sang định dạng PostgreSQL.

    Đã thực hiện cập nhật tự động biểu diễn và thêm tiện ích cho phép bạn thực thi ở chế độ song song hỗ trợ những căn cứ lớn. Các biện pháp đã được thực hiện để cải thiện độ tin cậy của DBMS. Chức năng Chuyển đổi dự phòng nhanh cho phép bạn chuyển công việc từ cơ sở dữ liệu chính sang bản sao trong chưa đầy một giây. Bây giờ bạn có thể kiểm tra tổng kiểm tra các trang giúp chẩn đoán lỗi ổ cứng.

    PostgreSQL 9.2

    PostgreSQL 9.0

    Các nhà phát triển hệ thống quản lý cơ sở dữ liệu mở PostgreSQL đã phát hành vào tháng 9 năm 2010 ứng cử viên phát hành đầu tiên của hệ thống Postrgesql 9.0, hệ thống này triển khai tất cả các chức năng được chuẩn bị phát hành trong phiên bản thứ chín của DBMS phổ biến này. Có sẵn miễn phí trên khoảnh khắc nàyĐã có phiên bản nhị phân của bản dựng sơ bộ của Postgresql 9.0 và mọi người có thể kiểm tra các khả năng mới của sự phát triển này trước khi chuyển các máy chủ sản xuất hoạt động với thông tin thực sang nó.

    Cũng ở phiên bản thứ chín, có thể sao chép thông tin từ nhật ký nhị phân, tương ứng với cơ chế Hot Stanby Databases trong Cơ sở dữ liệu Oracle. Các nhà phát triển cũng chú ý đến hệ thống đám mây hoặc SaaS ngày càng phổ biến. Giờ đây, DBMS được tối ưu hóa để làm việc trong môi trường máy ảo, hỗ trợ cơ chế sao chép dữ liệu nhanh cũng như khả năng sao chép thông tin từ một máy chủ chính sang một số lượng lớn (hơn một trăm) máy chủ phụ. Cũng Phiên bản mới hỗ trợ đầy đủ khả năng đánh địa chỉ bộ nhớ trong các biến thể 64-bit của Windows.

    • Dịch

    Hôm nay hãy nói về những ưu điểm của Postgres so với các hệ thống nguồn mở khác. Chúng tôi chắc chắn sẽ đề cập đến chủ đề này chi tiết hơn tại Ngày PG”16 ở Nga, chỉ còn hai tháng nữa thôi.

    Có thể bạn đang tự hỏi: “Tại sao lại là PostgreSQL?” Xét cho cùng, có các tùy chọn cơ sở dữ liệu quan hệ nguồn mở khác (vì mục đích của bài viết này, chúng tôi đã xem xét MySQL, MariaDB và Firebird), vậy Postgres có thể cung cấp những gì mà họ không có? Khẩu hiệu của PostgreSQL tuyên bố rằng đó là "Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới". Chúng tôi sẽ đưa ra một số lý do tại sao Postgres lại đưa ra những tuyên bố như vậy.

    Trong phần đầu tiên của loạt bài này, chúng ta sẽ nói về việc lưu trữ dữ liệu - các giới hạn về mô hình, cấu trúc, loại và kích thước. Và trong phần thứ hai chúng ta sẽ tập trung nhiều hơn vào việc lấy mẫu và thao tác dữ liệu.

    Mô hình dữ liệu

    PostgreSQL không chỉ là một DBMS quan hệ mà còn là một DBMS quan hệ đối tượng. Điều này mang lại cho nó một số lợi thế so với các cơ sở dữ liệu SQL nguồn mở khác như MySQL, MariaDB và Firebird.

    Đặc điểm cơ bản của cơ sở dữ liệu quan hệ đối tượng là hỗ trợ các đối tượng người dùng và hành vi của chúng, bao gồm các kiểu dữ liệu, hàm, hoạt động, miền và chỉ mục. Điều này làm cho Postgres cực kỳ linh hoạt và đáng tin cậy. Trong số những thứ khác, nó có thể tạo, lưu trữ và truy xuất các cấu trúc dữ liệu phức tạp. Trong một số ví dụ bên dưới, bạn sẽ thấy các cấu trúc lồng nhau và cấu trúc phức hợp không được RDBMS tiêu chuẩn hỗ trợ.

    Cấu trúc và kiểu dữ liệu

    Có một danh sách đầy đủ các loại dữ liệu mà Postgres hỗ trợ. Ngoài các kiểu dữ liệu số, float, văn bản, boolean và các kiểu dữ liệu dự kiến ​​khác (và nhiều biến thể của chúng), PostgreSQL tự hào hỗ trợ cho uuid, tiền tệ, liệt kê, hình học, nhị phân, địa chỉ mạng, chuỗi bit, tìm kiếm văn bản, xml, json, mảng, loại và phạm vi tổng hợp, cũng như một số loại nội bộ để xác định đối tượng và vị trí ghi nhật ký. Công bằng mà nói, MySQL, MariaDB và Firebird cũng có một số kiểu dữ liệu này, nhưng chỉ Postgres mới hỗ trợ tất cả.

    Chúng ta hãy xem xét kỹ hơn một số trong số họ:

    Địa chỉ mạng
    PostgreSQL cung cấp khả năng lưu trữ các loại địa chỉ mạng khác nhau. Kiểu dữ liệu CIDR (Định tuyến miền Internet không phân loại) tuân theo quy ước dành cho địa chỉ mạng IPv4 và IPv6. Dưới đây là một số ví dụ:
    • 192.168.100.128/25
    • 10.1.2.3/32
    • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
    • ::ffff:1.2.3.0/128
    Cũng có sẵn để lưu trữ địa chỉ mạng là kiểu dữ liệu INET, được sử dụng cho máy chủ IPv4 và IPv6, trong đó mạng con là tùy chọn. Kiểu dữ liệu MACADDR có thể được sử dụng để lưu trữ địa chỉ MAC để nhận dạng phần cứng, chẳng hạn như 08-00-2b-01-02-03.

    MySQL và MariaDB cũng có các hàm INET để chuyển đổi địa chỉ mạng, nhưng chúng không cung cấp các kiểu dữ liệu để lưu trữ địa chỉ mạng nội bộ. Firebird cũng không có loại lưu trữ địa chỉ mạng.

    Mảng đa chiều
    Vì Postgres là một cơ sở dữ liệu quan hệ đối tượng nên các mảng giá trị có thể được lưu trữ trong hầu hết các trường hợp. các loại hiện có dữ liệu. Điều này có thể được thực hiện bằng cách thêm dấu ngoặc vuông vào đặc tả kiểu dữ liệu cho cột hoặc bằng cách sử dụng biểu thức ARRAY. Kích thước của mảng có thể được chỉ định nhưng không bắt buộc. Chúng ta hãy xem thực đơn dã ngoại trong kỳ nghỉ để chứng minh việc sử dụng mảng:

    Tạo một bảng có giá trị là mảng TẠO BẢNG Holiday_picnic (holiday varchar(50) -- Chuỗi giá trị văn bản sandwich, -- mảng văn bản bên, -- mảng đa chiều văn bản món tráng miệng ARRAY, -- mảng văn bản đồ uống ARRAY -- mảng gồm 4 phần tử); -- chèn các giá trị mảng vào bảng CHÈN VÀO GIÁ TRỊ kỳ nghỉ_picnic ("Ngày lễ Lao động", "("thịt bò nướng","veggie","gà tây")", "( ("salad khoai tây","salad xanh", "salad mì ống "), ("khoai tây chiên","bánh quy giòn") )", "("cocktail trái cây","bánh dâu","kem")", "("soda","nước trái cây","bia" ,"Nước ")");
    MySQL, MariaDB và Firebird không thể làm điều này. Để lưu trữ các mảng giá trị như vậy theo cách truyền thống Cơ sở dữ liệu quan hệ dữ liệu, bạn sẽ phải sử dụng một giải pháp thay thế và tạo bàn riêng với các hàng cho mỗi giá trị mảng.

    Dữ liệu hình học
    Dữ liệu vị trí đang nhanh chóng trở thành một yêu cầu cốt lõi cho nhiều ứng dụng. PostgreSQL từ lâu đã hỗ trợ nhiều loại dữ liệu hình học như điểm, đường thẳng, hình tròn và đa giác. Một trong những loại này là PATH, bao gồm nhiều điểm tuần tự và có thể mở (điểm bắt đầu và điểm kết thúc không được kết nối) hoặc đóng (điểm bắt đầu và điểm kết thúc được kết nối). Hãy lấy một con đường đi bộ đường dài làm ví dụ. TRONG trong trường hợp này Con đường đi bộ đường dài là một vòng lặp, vì vậy điểm bắt đầu và điểm kết thúc được kết nối với nhau, điều đó có nghĩa là con đường của tôi đã bị đóng. Dấu ngoặc tròn xung quanh một tập hợp tọa độ biểu thị một đường dẫn đóng và các tọa độ biểu thị một đường dẫn mở.

    Tạo một bảng để lưu trữ các đường dẫn TẠO BẢNG các đường dẫn (trail_name varchar(250), đường dẫn Trail_path); -- chèn đường nhỏ vào bảng, -- trong đó tuyến đường được xác định bằng tọa độ ở định dạng kinh độ-vĩ độ CHÈN VÀO đường nhỏ GIÁ TRỊ ("Đường mòn Dool - Vòng lặp đường mòn trong rừng leo", ((37.172,-122.22261666667), (37.171616666667, -122.22385) 95,-122.2267 5), (37.1807833333333,-122.22466666667), (37.176116666667, -122.2222), (37.1753 ,-122.22293333333), (37.173116666667,-122.22281666667)));
    Tiện ích mở rộng PostGIS cho PostgreSQL mở rộng các thuộc tính dữ liệu hình học hiện có với các kiểu, hàm, toán tử và chỉ mục không gian phụ trợ. Nó cung cấp hỗ trợ vị trí và hỗ trợ cả dữ liệu raster và vector. Nó cũng cung cấp khả năng tương thích với nhiều công cụ không gian địa lý của bên thứ ba (có bản quyền và nguồn mở) để hiển thị, kết xuất và làm việc với dữ liệu.

    Lưu ý rằng MySQL 5.7.8 và MariaDB kể từ phiên bản 5.3.3 đã thêm các phần mở rộng kiểu dữ liệu để hỗ trợ tiêu chuẩn thông tin địa lý OpenGIS. Phiên bản MySQL này và các phiên bản tiếp theo của MariaDB cung cấp khả năng lưu trữ kiểu dữ liệu tương tự như dữ liệu địa lý Postgres gốc. Tuy nhiên, trong MySQL và MariaDB, các giá trị dữ liệu trước tiên phải được chuyển đổi sang định dạng hình học bằng các lệnh đơn giản trước khi chèn vào bảng. Firebird hiện không hỗ trợ các kiểu dữ liệu hình học.

    Hỗ trợ JSON
    Hỗ trợ JSON trong PostgreSQL cho phép bạn chuyển sang lưu trữ dữ liệu không có lược đồ trong cơ sở dữ liệu SQL. Điều này có thể hữu ích khi cấu trúc dữ liệu yêu cầu một số tính linh hoạt: ví dụ: nếu cấu trúc vẫn thay đổi trong quá trình phát triển hoặc không biết đối tượng dữ liệu sẽ chứa trường nào.

    Kiểu dữ liệu JSON cung cấp xác thực JSON, cho phép bạn sử dụng các toán tử và hàm JSON chuyên dụng được tích hợp trong Postgres để thực hiện truy vấn và thao tác dữ liệu. Cũng có sẵn loại JSONB - một biến thể nhị phân của định dạng JSON trong đó các khoảng trắng bị loại bỏ, việc sắp xếp các đối tượng không được giữ nguyên, thay vào đó chúng được lưu trữ theo cách tối ưu nhất và chỉ giá trị cuối cùngđối với các khóa trùng lặp. JSONB thường là định dạng ưa thích vì nó yêu cầu ít không gian đối tượng hơn, có thể được lập chỉ mục và xử lý nhanh hơn vì không yêu cầu lặp lại phân tích cú pháp.

    MySQL 5.7.8 và MariaDB 10.0.1 đã thêm hỗ trợ cho các đối tượng JSON gốc. Nhưng mặc dù hiện có nhiều hàm và toán tử dành cho JSON có sẵn trong các cơ sở dữ liệu này nhưng chúng không được lập chỉ mục giống như JSONB trong PostgreSQL. Firebird vẫn chưa tham gia xu hướng và chỉ hỗ trợ các đối tượng JSON dưới dạng văn bản.

    Tạo một loại mới
    Nếu bạn thấy danh sách các loại dữ liệu phong phú của Postgres không đủ, bạn có thể sử dụng lệnh CREATE TYPE để tạo các loại dữ liệu mới như hỗn hợp, liệt kê, phạm vi và cơ bản. Hãy xem một ví dụ về việc tạo và gửi yêu cầu thuộc loại hỗn hợp mới:

    Tạo một kiểu tổng hợp mới "wine" TẠO LOẠI wine AS (wine_vineyard varchar(50), wine_type varchar(50), wine_year int); -- tạo một bảng sử dụng các cặp kiểu tổng hợp "wine" TẠO BẢNG (menu_entree varchar(50), wine_pairing wine); -- chèn dữ liệu vào bảng bằng cách sử dụng biểu thức ROW INSERT INTO các cặp VALUES ("Lobster Tail",ROW("Stag""s Leap","Chardonnay", 2012)), ("Elk Huy chương",ROW("Rombauer" , "Cabernet Sauvignon", 2012)); /* chọn từ một bảng bằng cách sử dụng tên cột (sử dụng dấu ngoặc đơn cách nhau bằng dấu chấm từ tên trường trong loại tổng hợp) */ SELECT (wine_pairing).wine_vineyard, (wine_pairing).wine_type FROM cặp WHERE menu_entree = "Elk Huy chương";
    Vì chúng không có quan hệ đối tượng nên MySQL, MariaDB và Firebird không cung cấp chức năng mạnh mẽ như vậy.

    Thứ nguyên dữ liệu

    PostgreSQL có thể xử lý rất nhiều dữ liệu. Các hạn chế được công bố hiện tại được liệt kê dưới đây:

    Trong Soạn [khoảng. per.: tổ chức nơi tác giả của bài viết gốc làm việc] chúng tôi tự động mở rộng quy mô cài đặt của bạn để bạn không phải lo lắng về sự gia tăng lượng dữ liệu. Nhưng như bất kỳ quản trị viên cơ sở dữ liệu nào cũng biết, bạn nên cảnh giác với quá nhiều hoặc quá nhiều lựa chọn. Chúng tôi khuyên bạn nên sử dụng kiến ​​thức thông thường khi tạo bảng và thêm chỉ mục.

    Để so sánh, MySQL và MariaDB nổi tiếng với giới hạn kích thước hàng là 65.535 byte. Firebird cũng chỉ cung cấp kích thước dòng tối đa là 64Kb. Thông thường, lượng dữ liệu bị giới hạn bởi kích thước tệp tối đa của hệ điều hành. Bởi vì PostgreSQL có thể lưu trữ dữ liệu dạng bảng trong nhiều tệp kích thước nhỏ hơn, anh ta có thể vượt qua giới hạn này. Nhưng cần lưu ý rằng quá nhiều tệp có thể tác động tiêu cực đến hiệu suất. MySQL và MariaDB hỗ trợ nhiều cột hơn trên mỗi bảng (lên tới 4.096 tùy thuộc vào loại dữ liệu) và kích thước bảng riêng lẻ lớn hơn PostgreSQL, nhưng nhu cầu vượt quá giới hạn Postgres hiện tại chỉ phát sinh trong những trường hợp cực kỳ hiếm.

    Toàn vẹn dữ liệu

    Postgres cố gắng tuân thủ ANSI-SQL:2008, tuân thủ ACID (Tính nguyên tử, Tính nhất quán, Cách ly và Độ bền), đồng thời được biết đến với tính toàn vẹn tham chiếu và giao dịch. Khóa chính, ràng buộc và khóa ngoại xếp tầng, ràng buộc duy nhất, ràng buộc NOT NULL, ràng buộc kiểm tra và các tính năng toàn vẹn dữ liệu khác đảm bảo rằng chỉ dữ liệu hợp lệ mới được giữ lại.

    MySQL và MariaDB làm việc chăm chỉ hơn để phù hợp chuẩn SQL với công cụ bảng InnoDB/XtraDB. Hiện tại, họ cung cấp tùy chọn NGHIÊM TÚC bằng cách sử dụng các chế độ SQL để thiết lập kiểm tra tính hợp lệ đối với dữ liệu đang được sử dụng. Tuy nhiên, tùy thuộc vào chế độ bạn sử dụng, dữ liệu không hợp lệ và thậm chí bị cắt bớt mà bạn không biết có thể được chèn hoặc tạo trong quá trình cập nhật. Hiện tại không có cơ sở dữ liệu nào hỗ trợ KIỂM TRA các hạn chế. Ngoài ra, chúng còn có nhiều tính năng liên quan đến các ràng buộc toàn vẹn tham chiếu. khóa ngoại. Ngoài những điều trên, tính toàn vẹn của dữ liệu có thể bị tổn hại đáng kể tùy thuộc vào công cụ lưu trữ được chọn. MySQL (và nhánh MariaDB) không giấu giếm sự thật rằng họ đánh đổi tính toàn vẹn và tuân thủ các tiêu chuẩn để lấy tốc độ và hiệu quả.

    Tổng hợp

    Postgres có nhiều tính năng. Được xây dựng bằng mô hình quan hệ đối tượng, nó hỗ trợ các cấu trúc phức tạp và nhiều loại dữ liệu tích hợp và do người dùng xác định. Nó cung cấp dung lượng dữ liệu mở rộng và được tin cậy vì xử lý cẩn thận tính toàn vẹn dữ liệu. Bạn có thể không cần tất cả các tính năng lưu trữ nâng cao mà chúng tôi đã khám phá trong bài viết này, nhưng vì nhu cầu của bạn có thể tăng lên nhanh chóng nên việc có tất cả tính năng đó trong tầm tay sẽ mang lại lợi ích nhất định.

    Nếu bạn cảm thấy PostgreSQL không phù hợp với nhu cầu của mình hoặc bạn muốn “bắn từ hông” thì bạn có thể muốn xem qua cơ sở dữ liệu NoSQL mà chúng tôi cung cấp tại Compose hoặc xem xét các cơ sở dữ liệu khác Cơ sở dữ liệu SQL dữ liệu chúng tôi đã đề cập. Mỗi người trong số họ đều có những ưu điểm riêng. Compose tin tưởng chắc chắn rằng việc chọn cơ sở dữ liệu phù hợp cho nhiệm vụ cụ thể…đôi khi điều đó có nghĩa là phải chọn nhiều cơ sở dữ liệu!

    Muốn có thêm Postgres?

  • SQL
  • Phát triển trang web
    • Dịch

    Hôm nay hãy nói về những ưu điểm của Postgres so với các hệ thống nguồn mở khác. Chúng tôi chắc chắn sẽ đề cập đến chủ đề này chi tiết hơn tại Ngày PG”16 ở Nga, chỉ còn hai tháng nữa thôi.

    Có thể bạn đang tự hỏi: “Tại sao lại là PostgreSQL?” Xét cho cùng, có các tùy chọn cơ sở dữ liệu quan hệ nguồn mở khác (vì mục đích của bài viết này, chúng tôi đã xem xét MySQL, MariaDB và Firebird), vậy Postgres có thể cung cấp những gì mà họ không có? Khẩu hiệu của PostgreSQL tuyên bố rằng đó là "Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới". Chúng tôi sẽ đưa ra một số lý do tại sao Postgres lại đưa ra những tuyên bố như vậy.

    Trong phần đầu tiên của loạt bài này, chúng ta sẽ nói về việc lưu trữ dữ liệu - các giới hạn về mô hình, cấu trúc, loại và kích thước. Và hãy tập trung hơn vào việc lấy mẫu và thao tác dữ liệu.

    Mô hình dữ liệu

    PostgreSQL không chỉ là một DBMS quan hệ mà còn là một DBMS quan hệ đối tượng. Điều này mang lại cho nó một số lợi thế so với các cơ sở dữ liệu SQL nguồn mở khác như MySQL, MariaDB và Firebird.

    Đặc điểm cơ bản của cơ sở dữ liệu quan hệ đối tượng là hỗ trợ các đối tượng người dùng và hành vi của chúng, bao gồm các kiểu dữ liệu, hàm, hoạt động, miền và chỉ mục. Điều này làm cho Postgres cực kỳ linh hoạt và đáng tin cậy. Trong số những thứ khác, nó có thể tạo, lưu trữ và truy xuất các cấu trúc dữ liệu phức tạp. Trong một số ví dụ bên dưới, bạn sẽ thấy các cấu trúc lồng nhau và cấu trúc phức hợp không được RDBMS tiêu chuẩn hỗ trợ.

    Cấu trúc và kiểu dữ liệu

    Có một danh sách đầy đủ các loại dữ liệu mà Postgres hỗ trợ. Ngoài các kiểu dữ liệu số, float, văn bản, boolean và các kiểu dữ liệu dự kiến ​​khác (và nhiều biến thể của chúng), PostgreSQL tự hào hỗ trợ uuid, tiền tệ, liệt kê, hình học, nhị phân, địa chỉ mạng, chuỗi bit, tìm kiếm văn bản, xml, json, mảng , các loại và phạm vi tổng hợp, cũng như một số loại nội bộ để xác định đối tượng và vị trí ghi nhật ký. Công bằng mà nói, MySQL, MariaDB và Firebird cũng có một số kiểu dữ liệu này, nhưng chỉ Postgres mới hỗ trợ tất cả.

    Chúng ta hãy xem xét kỹ hơn một số trong số họ:

    Địa chỉ mạng
    PostgreSQL cung cấp khả năng lưu trữ các loại địa chỉ mạng khác nhau. Kiểu dữ liệu CIDR (Định tuyến miền Internet không phân loại) tuân theo quy ước dành cho địa chỉ mạng IPv4 và IPv6. Dưới đây là một số ví dụ:
    • 192.168.100.128/25
    • 10.1.2.3/32
    • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
    • ::ffff:1.2.3.0/128
    Cũng có sẵn để lưu trữ địa chỉ mạng là kiểu dữ liệu INET, được sử dụng cho máy chủ IPv4 và IPv6, trong đó mạng con là tùy chọn. Kiểu dữ liệu MACADDR có thể được sử dụng để lưu trữ địa chỉ MAC để nhận dạng phần cứng, chẳng hạn như 08-00-2b-01-02-03.

    MySQL và MariaDB cũng có các hàm INET để chuyển đổi địa chỉ mạng, nhưng chúng không cung cấp các kiểu dữ liệu để lưu trữ địa chỉ mạng nội bộ. Firebird cũng không có loại lưu trữ địa chỉ mạng.

    Mảng đa chiều
    Vì Postgres là cơ sở dữ liệu quan hệ đối tượng nên các mảng giá trị có thể được lưu trữ cho hầu hết các loại dữ liệu hiện có. Điều này có thể được thực hiện bằng cách thêm dấu ngoặc vuông vào đặc tả kiểu dữ liệu cho cột hoặc bằng cách sử dụng biểu thức ARRAY. Kích thước của mảng có thể được chỉ định nhưng không bắt buộc. Chúng ta hãy xem thực đơn dã ngoại trong kỳ nghỉ để chứng minh việc sử dụng mảng:

    Chúng tôi tạo một bảng có các giá trị là các mảng TẠO BẢNG Holiday_picnic (holiday varchar(50) -- văn bản sandwich giá trị chuỗi, -- văn bản bên mảng , -- mảng văn bản tráng miệng mảng đa chiều ARRAY, -- mảng văn bản đồ uống ARRAY -- mảng văn bản 4- x phần tử); -- chèn các giá trị mảng vào bảng CHÈN VÀO GIÁ TRỊ kỳ nghỉ_picnic ("Ngày lễ Lao động", "("thịt bò nướng","veggie","gà tây")", "( ("salad khoai tây","salad xanh", "salad mì ống "), ("khoai tây chiên","bánh quy giòn") )", "("cocktail trái cây","bánh dâu","kem")", "("soda","nước trái cây","bia" ,"Nước ")");
    MySQL, MariaDB và Firebird không thể làm điều này. Để lưu trữ các mảng giá trị như vậy trong cơ sở dữ liệu quan hệ truyền thống, bạn sẽ phải sử dụng một giải pháp thay thế và tạo một bảng riêng có các hàng cho từng giá trị mảng.

    Dữ liệu hình học
    Dữ liệu vị trí đang nhanh chóng trở thành một yêu cầu cốt lõi cho nhiều ứng dụng. PostgreSQL từ lâu đã hỗ trợ nhiều loại dữ liệu hình học như điểm, đường thẳng, hình tròn và đa giác. Một trong những loại này là PATH, bao gồm nhiều điểm tuần tự và có thể mở (điểm bắt đầu và điểm kết thúc không được kết nối) hoặc đóng (điểm bắt đầu và điểm kết thúc được kết nối). Hãy lấy một con đường đi bộ đường dài làm ví dụ. Trong trường hợp này, đường đi bộ là một đường vòng, do đó điểm bắt đầu và điểm kết thúc được kết nối với nhau và do đó đường đi của tôi bị đóng. Dấu ngoặc tròn xung quanh một tập hợp tọa độ biểu thị đường dẫn đóng, trong khi dấu ngoặc vuông biểu thị đường dẫn mở.

    Tạo một bảng để lưu trữ các đường dẫn TẠO BẢNG các đường dẫn (trail_name varchar(250), đường dẫn Trail_path); -- chèn đường nhỏ vào bảng, -- trong đó tuyến đường được xác định bằng tọa độ ở định dạng kinh độ-vĩ độ CHÈN VÀO đường nhỏ GIÁ TRỊ ("Đường mòn Dool - Vòng lặp đường mòn trong rừng leo", ((37.172,-122.22261666667), (37.171616666667, -122.22385) 95,-122.2267 5), (37.1807833333333,-122.22466666667), (37.176116666667, -122.2222), (37.1753 ,-122.22293333333), (37.173116666667,-122.22281666667)));
    Tiện ích mở rộng PostGIS cho PostgreSQL mở rộng các thuộc tính dữ liệu hình học hiện có với các kiểu, hàm, toán tử và chỉ mục không gian phụ trợ. Nó cung cấp hỗ trợ vị trí và hỗ trợ cả dữ liệu raster và vector. Nó cũng cung cấp khả năng tương thích với nhiều công cụ không gian địa lý của bên thứ ba (có bản quyền và nguồn mở) để hiển thị, kết xuất và làm việc với dữ liệu.

    Lưu ý rằng MySQL 5.7.8 và MariaDB kể từ phiên bản 5.3.3 đã thêm các phần mở rộng kiểu dữ liệu để hỗ trợ tiêu chuẩn thông tin địa lý OpenGIS. Phiên bản MySQL này và các phiên bản tiếp theo của MariaDB cung cấp khả năng lưu trữ kiểu dữ liệu tương tự như dữ liệu địa lý Postgres gốc. Tuy nhiên, trong MySQL và MariaDB, các giá trị dữ liệu trước tiên phải được chuyển đổi sang định dạng hình học bằng các lệnh đơn giản trước khi chèn vào bảng. Firebird hiện không hỗ trợ các kiểu dữ liệu hình học.

    Hỗ trợ JSON
    Hỗ trợ JSON trong PostgreSQL cho phép bạn chuyển sang lưu trữ dữ liệu không có lược đồ trong cơ sở dữ liệu SQL. Điều này có thể hữu ích khi cấu trúc dữ liệu yêu cầu một số tính linh hoạt: ví dụ: nếu cấu trúc vẫn thay đổi trong quá trình phát triển hoặc không biết đối tượng dữ liệu sẽ chứa trường nào.

    Kiểu dữ liệu JSON cung cấp xác thực JSON, cho phép bạn sử dụng các toán tử và hàm JSON chuyên dụng được tích hợp trong Postgres để thực hiện truy vấn và thao tác dữ liệu. Ngoài ra còn có loại JSONB, một biến thể nhị phân của định dạng JSON loại bỏ khoảng trắng, không bảo toàn việc sắp xếp các đối tượng, thay vào đó lưu trữ chúng theo cách tối ưu nhất và chỉ lưu trữ giá trị cuối cùng cho các khóa trùng lặp. JSONB thường là định dạng ưa thích vì nó yêu cầu ít không gian đối tượng hơn, có thể được lập chỉ mục và xử lý nhanh hơn vì không yêu cầu phân tích cú pháp lại.

    MySQL 5.7.8 và MariaDB 10.0.1 đã thêm hỗ trợ cho các đối tượng JSON gốc. Nhưng mặc dù hiện có nhiều hàm và toán tử dành cho JSON có sẵn trong các cơ sở dữ liệu này nhưng chúng không được lập chỉ mục giống như JSONB trong PostgreSQL. Firebird vẫn chưa tham gia xu hướng và chỉ hỗ trợ các đối tượng JSON dưới dạng văn bản.

    Tạo một loại mới
    Nếu bạn thấy danh sách các loại dữ liệu phong phú của Postgres không đủ, bạn có thể sử dụng lệnh CREATE TYPE để tạo các loại dữ liệu mới như hỗn hợp, liệt kê, phạm vi và cơ bản. Hãy xem một ví dụ về việc tạo và gửi yêu cầu thuộc loại hỗn hợp mới:

    Tạo một kiểu tổng hợp mới "wine" TẠO LOẠI wine AS (wine_vineyard varchar(50), wine_type varchar(50), wine_year int); -- tạo một bảng sử dụng các cặp kiểu tổng hợp "wine" TẠO BẢNG (menu_entree varchar(50), wine_pairing wine); -- chèn dữ liệu vào bảng bằng cách sử dụng biểu thức ROW INSERT INTO các cặp VALUES ("Lobster Tail",ROW("Stag""s Leap","Chardonnay", 2012)), ("Elk Huy chương",ROW("Rombauer" , "Cabernet Sauvignon", 2012)); /* chọn từ một bảng bằng cách sử dụng tên cột (sử dụng dấu ngoặc đơn cách nhau bằng dấu chấm từ tên trường trong loại tổng hợp) */ SELECT (wine_pairing).wine_vineyard, (wine_pairing).wine_type FROM cặp WHERE menu_entree = "Elk Huy chương";
    Vì chúng không có quan hệ đối tượng nên MySQL, MariaDB và Firebird không cung cấp chức năng mạnh mẽ như vậy.

    Thứ nguyên dữ liệu

    PostgreSQL có thể xử lý rất nhiều dữ liệu. Các hạn chế được công bố hiện tại được liệt kê dưới đây:

    Trong Soạn [khoảng. per.: tổ chức nơi tác giả của bài viết gốc làm việc] chúng tôi tự động mở rộng quy mô cài đặt của bạn để bạn không phải lo lắng về sự gia tăng lượng dữ liệu. Nhưng như bất kỳ quản trị viên cơ sở dữ liệu nào cũng biết, bạn nên cảnh giác với quá nhiều hoặc quá nhiều lựa chọn. Chúng tôi khuyên bạn nên sử dụng kiến ​​thức thông thường khi tạo bảng và thêm chỉ mục.

    Để so sánh, MySQL và MariaDB nổi tiếng với giới hạn kích thước hàng là 65.535 byte. Firebird cũng chỉ cung cấp kích thước dòng tối đa là 64Kb. Thông thường, lượng dữ liệu bị giới hạn bởi kích thước tệp tối đa của hệ điều hành. Vì PostgreSQL có thể lưu trữ dữ liệu dạng bảng trong nhiều tệp nhỏ hơn nên nó có thể khắc phục được hạn chế này. Nhưng cần lưu ý rằng quá nhiều tệp có thể tác động tiêu cực đến hiệu suất. MySQL và MariaDB hỗ trợ nhiều cột hơn trên mỗi bảng (lên tới 4.096 tùy thuộc vào loại dữ liệu) và kích thước bảng riêng lẻ lớn hơn PostgreSQL, nhưng nhu cầu vượt quá giới hạn Postgres hiện tại chỉ phát sinh trong những trường hợp cực kỳ hiếm.

    Toàn vẹn dữ liệu

    Postgres cố gắng tuân thủ ANSI-SQL:2008, tuân thủ ACID (Tính nguyên tử, Tính nhất quán, Cách ly và Độ bền), đồng thời được biết đến với tính toàn vẹn tham chiếu và giao dịch. Khóa chính, ràng buộc và khóa ngoại xếp tầng, ràng buộc duy nhất, ràng buộc NOT NULL, ràng buộc kiểm tra và các tính năng toàn vẹn dữ liệu khác đảm bảo rằng chỉ dữ liệu hợp lệ mới được giữ lại.

    MySQL và MariaDB đang nỗ lực nhiều hơn để tuân thủ tiêu chuẩn SQL với các công cụ bảng InnoDB/XtraDB. Hiện tại, họ cung cấp tùy chọn NGHIÊM TÚC bằng cách sử dụng các chế độ SQL để thiết lập kiểm tra tính hợp lệ đối với dữ liệu đang được sử dụng. Tuy nhiên, tùy thuộc vào chế độ bạn sử dụng, dữ liệu không hợp lệ và thậm chí bị cắt bớt mà bạn không biết có thể được chèn hoặc tạo trong quá trình cập nhật. Hiện tại không có cơ sở dữ liệu nào hỗ trợ các hạn chế CHECK. Ngoài ra, chúng còn có nhiều tính năng liên quan đến ràng buộc toàn vẹn tham chiếu trên khóa ngoại. Ngoài những điều trên, tính toàn vẹn của dữ liệu có thể bị tổn hại đáng kể tùy thuộc vào công cụ lưu trữ được chọn. MySQL (và nhánh MariaDB) không giấu giếm sự thật rằng họ đánh đổi tính toàn vẹn và tuân thủ các tiêu chuẩn để lấy tốc độ và hiệu quả.

    Tổng hợp

    Postgres có nhiều tính năng. Được xây dựng bằng mô hình quan hệ đối tượng, nó hỗ trợ các cấu trúc phức tạp và nhiều loại dữ liệu tích hợp và do người dùng xác định. Nó cung cấp dung lượng dữ liệu mở rộng và được tin cậy vì xử lý cẩn thận tính toàn vẹn dữ liệu. Bạn có thể không cần tất cả các tính năng lưu trữ nâng cao mà chúng tôi đã khám phá trong bài viết này, nhưng vì nhu cầu của bạn có thể tăng lên nhanh chóng nên việc có tất cả tính năng đó trong tầm tay sẽ mang lại lợi ích nhất định.

    Nếu bạn cảm thấy PostgreSQL không phù hợp với nhu cầu của mình hoặc bạn muốn “bắn từ hông” thì bạn có thể muốn xem qua cơ sở dữ liệu NoSQL mà chúng tôi cung cấp tại Compose hoặc xem xét các cơ sở dữ liệu SQL khác mà chúng tôi đã đề cập . Mỗi người trong số họ đều có những ưu điểm riêng. Compose tin chắc rằng việc chọn cơ sở dữ liệu phù hợp cho một nhiệm vụ nhất định là rất quan trọng... đôi khi điều đó có nghĩa là phải chọn nhiều cơ sở dữ liệu!

    Muốn có thêm Postgres?

    PostgreSQL là một DBMS quan hệ đối tượng đa nền tảng, mã nguồn mở. Bài viết này sẽ hướng dẫn bạn cách cài đặt PostgreSQL trong Ubuntu Linux, kết nối với nó và chạy một số truy vấn SQL đơn giản cũng như cách thiết lập bản sao lưu.

    Để cài đặt PostgreSQL 9.2 trên Ubuntu 12.10, hãy chạy các lệnh sau:

    sudo apt-add-repository ppa:pitti/postgresql
    cập nhật sudo apt-get
    sudo apt-get cài đặt postgresql-9.2

    Hãy thử làm việc với DBMS thông qua shell:

    sudo -u postgres psql

    Hãy tạo cơ sở dữ liệu thử nghiệm và người dùng thử nghiệm:

    TẠO CƠ SỞ DỮ LIỆU test_database;
    TẠO NGƯỜI DÙNG test_user BẰNG mật khẩu "qwerty";
    CẤP TẤT CẢ TRÊN CƠ SỞ DỮ LIỆU test_database CHO test_user;

    Để thoát khỏi shell, nhập lệnh \q .

    Bây giờ hãy thử làm việc với cơ sở dữ liệu đã tạo thay mặt cho test_user:

    psql -h localhost test_database test_user

    Hãy tạo một bảng mới:

    TẠO SEQUENCE user_ids;
    TẠO người dùng BẢNG (
    id INTEGER PRIMARY KEY MẶC ĐỊNH TIẾP THEO ("user_ids") ,
    đăng nhập CHAR(64) ,
    mật khẩu CHAR(64));

    Xin lưu ý rằng, không giống như một số DBMS khác, PostgreSQL không có các cột có thuộc tính auto_increment. Thay vào đó, Postgres sử dụng trình tự. Hiện tại, chỉ cần biết rằng bằng cách sử dụng hàm nextval, chúng ta có thể nhận được các số duy nhất cho một chuỗi nhất định:

    CHỌN TIẾP THEO ("user_ids" );

    Bằng cách đặt giá trị mặc định cho trường id của bảng người dùng thành TIẾP THEO("user_ids"), chúng ta đã đạt được hiệu quả tương tự như auto_increment mang lại. Khi thêm bản ghi mới vào bảng, chúng tôi có thể không chỉ định id vì id duy nhất sẽ được tạo tự động. Nhiều bảng có thể sử dụng cùng một trình tự. Bằng cách này, chúng tôi có thể đảm bảo rằng giá trị của một số trường trong các bảng này không trùng nhau. Theo nghĩa này, trình tự linh hoạt hơn auto_increment.

    Có thể tạo cùng một bảng chỉ bằng một lệnh:

    TẠO BẢNG user2 (
    id KHÓA CHÍNH SERIAL,
    đăng nhập CHAR(64) ,
    mật khẩu CHAR(64));

    Trong trường hợp này, chuỗi trường id được tạo tự động.

    Bây giờ, bằng cách sử dụng lệnh \d, bạn có thể xem danh sách tất cả các bảng có sẵn và bằng cách sử dụng người dùng \d, bạn có thể xem mô tả về bảng người dùng. Nếu bạn không nhận được thông tin mình đang tìm kiếm, hãy thử \d+ thay vì \d . Bạn có thể lấy danh sách cơ sở dữ liệu bằng lệnh \l và chuyển sang cơ sở dữ liệu cụ thể bằng lệnh \c dbname. Để hiển thị trợ giúp về lệnh, hãy nói \? .

    Điều quan trọng cần lưu ý là PostgreSQL chuyển đổi tên bảng và cột thành chữ thường theo mặc định. Nếu bạn không muốn hành vi này, bạn có thể sử dụng dấu ngoặc kép:

    TẠO BẢNG "anotherTable" ("someValue" VARCHAR (64 ) );

    Một tính năng khác của PostgreSQL có thể gây khó khăn khi bắt đầu làm việc với DBMS này là cái gọi là “lược đồ”. Lược đồ giống như một không gian tên cho các bảng, giống như một thư mục chứa các bảng bên trong cơ sở dữ liệu.

    Tạo một lược đồ:

    TẠO đặt chỗ SCHEMA;

    Chuyển sang sơ đồ:

    THIẾT LẬP search_path ĐỂ đặt chỗ;

    Danh sách xem các chương trình hiện có bạn có thể sử dụng lệnh \dn. Lược đồ mặc định được đặt tên là public. Về nguyên tắc, bạn có thể sử dụng thành công PostgreSQL mà không cần biết đến sự tồn tại của các lược đồ. Nhưng khi làm việc với mã kế thừa và trong một số trường hợp phức tạp, việc biết về lược đồ có thể rất hữu ích.

    Mặt khác, làm việc với PostgreSQL không khác nhiều so với làm việc với bất kỳ DBMS quan hệ nào khác:

    CHÈN VÀO người dùng (đăng nhập, mật khẩu)
    GIÁ TRỊ ("afiskon", "123456" );
    CHỌN * TỪ người dùng;

    Nếu bây giờ bạn cố gắng kết nối với Postgres từ một máy khác, bạn sẽ thất bại:

    psql -h 192.168.0.1 test_database test_user

    Psql: không thể kết nối với máy chủ: Kết nối bị từ chối
    Máy chủ có đang chạy trên máy chủ "192.168.0.1" và chấp nhận
    Kết nối TCP/IP trên cổng 5432?

    Để khắc phục điều này, hãy thêm dòng:

    listen_addresses = "localhost,192.168.0.1"

    ...vào tệp /etc/postgresql/9.2/main/postgresql.conf.

    Postgres Pro là một DBMS của Nga được phát triển bởi Postgres Professional dựa trên DBMS PostgreSQL được phân phối miễn phí. Postgres Pro được bao gồm trong sổ đăng ký phần mềm của Nga (xem https://reestr.minsvyaz.ru/reestr/65273/)

    Bằng cách này, khách hàng có thể tiếp cận các lợi ích về chức năng và hiệu suất mang lại lợi ích cho họ mà không cần phải chờ bản phát hành PostgreSQL mới (có thể mất tới một năm). Với tư cách là tác giả, chúng tôi cung cấp hỗ trợ cho tất cả sự phát triển của chúng tôi. Với tư cách là đại diện của cộng đồng quốc tế gồm các nhà phát triển PostgreSQL, chúng tôi cũng cung cấp hỗ trợ thương mại cho Hệ quản trị cơ sở dữ liệu PostgreSQL được phân phối miễn phí.

    So sánh các phiên bản PostgreSQL

    cơ sở dữ liệuPostgreSQL
    Doanh nghiệp
    PostgreSQL
    Tiêu chuẩn
    PostgreSQL
    Một DBMS thương mại được phát triển bởi Postgres Professional dành cho các ứng dụng quan trọng và tải trọng cao.DBMS mã nguồn mở của Nga được phát triển bởi Postgres Professional dựa trên DBMS PostgreSQL được phân phối tự doMột DBMS phân phối tự do được phát triển bởi cộng đồng quốc tế.
    Đăng ký thống nhất phần mềm Nga
    Bộ đếm giao dịch 64-bit
    Sao lưu gia tăng ở cấp khối
    Chứng chỉ FSTEC SVT 5, NDV 4
    Giao dịch tự động
    Bảng phân vùng
    nén dữ liệu
    Multimaster
    Hỗ trợ 1C
    Bàn di động
    Gợi ý về lịch trình


    Phiên bản PostgreSQL

    Số phiên bản PostgreSQL được lấy từ số phiên bản PostgreSQL có thêm một chữ số cho biết số phát hành hiện tại. Khi một phiên bản nhỏ mới của PostgreSQL được phát hành (điều này thường xảy ra khi các bản vá liên quan đến bảo mật và sửa các lỗi nghiêm trọng xuất hiện), việc đánh số PostgreSQL được đặt lại thành một. Ví dụ: khi PostgreSQL 9.5.1 được phát hành, PostgresPro 9.5.1.1 được phát hành, thì trước khi PostgreSQL 9.5.2 được phát hành, Postgres Pro 9.5.1.2, 9.5.1.3, v.v. có thể được phát hành. Khi PostgreSQL 9.5.2 được phát hành, Postgres Pro sẽ được cập nhật lên phiên bản 9.5.2.1, v.v.

    Đồng thời với việc phát hành mã nguồn Postgres Pro chúng tôi xuất bản các tập hợp của mình dưới dạng gói theo nền tảng khác nhau. Đây là những điều sau đây hệ điều hành và phiên bản của họ:

    1. Linux
      • CentOS 6/7
      • Debian 8/7
      • Ubuntu 12.04/14.04/16.04/16.10,
      • Oracle Linux,
      • Máy chủ Rosa Enterprise Linux,
      • Máy chủ Cobalt ROSA SX,
      • Máy chủ Cobalt ROSA DX,
      • ROSA Marathon LTS 2012,
      • Alt Linux Nhân mã 8,
      • Alt Linux SPT 6,
      • Alt Linux SPT 7,
      • Máy chủ doanh nghiệp SUSE Linux,
    2. Microsoft® Windows ® 2012 hoặc 2016.

    Cơ sở dữ liệu Postgres Pro 9.5.*.* tương thích với PostgreSQL 9.5.* Khi nâng cấp từ 9.5, không cần kết xuất/khôi phục. Khi chuyển từ nhiều hơn phiên bản trước PostgreSQL yêu cầu sử dụng kết xuất/khôi phục hoặc pg_upgrade.

    Phiên bản hiện tại của Postgres Pro Standard là 11.2.1. Ngày phát hành - 28 tháng 3 năm 2019. .

    Sự khác biệt giữa Postgres Pro Standard và PostgreSQL

    Trong Tiêu chuẩn PostgreSQL so với Phiên bản hiện tại PostgreSQL hiện bao gồm những thay đổi sau:

    1. Cải thiện hiệu suất trên hệ thống đa lõi:
      • tối ưu hóa việc phân bổ bảng băm trong bộ nhớ dùng chung, loại bỏ tranh chấp khóa cho một số lượng lớn quy trình.
      • Tối ưu hóa chủ sở hữu tài nguyên. Cải thiện hiệu suất của các truy vấn phức tạp và truy vấn đối với các bảng có số lượng phân vùng lớn.
      • Tối ưu hóa trình quản lý bộ đệm
      • Tối ưu hóa LWLock cho kiến ​​trúc Power8
      • Tối ưu hóa cam kết hai giai đoạn
    2. Cải tiến tìm kiếm toàn văn:
      • hỗ trợ tìm kiếm cụm từ
      • hỗ trợ từ điển hunspell để làm việc với các dạng từ
      • một số từ điển, bao gồm tiếng Nga và tiếng Anh, được đưa vào bản phân phối và kết nối của chúng yêu cầu một lệnh SQL
      • mô-đun chia sẻ_ispell, giúp tối ưu hóa hiệu suất tìm kiếm toàn văn bản bằng cách tải từ điển vào bộ nhớ khi khởi động máy chủ chứ không phải khi bắt đầu phiên.
    3. Bao gồm các chỉ số. Hỗ trợ cấu trúc INCLUDING trong CREATE INDEX.
    4. Tính di động: libicu được hỗ trợ trên tất cả các nền tảng, cung cấp khả năng xử lý rõ ràng về thứ tự sắp xếp và các hoạt động khác với các ký tự Unicode. Trên một số nền tảng, thư viện này cải thiện hiệu suất sắp xếp và quan trọng là cho phép Postgres Pro sử dụng các khóa viết tắt đã bị vô hiệu hóa trong phiên bản chính của PostgreSQL.
    5. Mô-đun pg_trgm không chỉ hỗ trợ so sánh chuỗi mờ mà còn hỗ trợ tìm kiếm chuỗi con mờ.
    6. Mô-đun pageinspect hỗ trợ truy cập không chỉ vào thông tin meta mà còn truy cập vào biểu diễn bên trong của dữ liệu bảng.
    7. Một mô-đun mới đã được thêm vào, sr_plan, cho phép bạn lưu các kế hoạch thực hiện truy vấn và sử dụng các kế hoạch đã lưu thay vì tạo lại kế hoạch truy vấn mỗi lần nó được thực thi.
    8. Mô-đun dump_stat đã được thêm vào, cho phép bạn lưu thông tin về số liệu thống kê và khôi phục nó khi kết xuất cơ sở dữ liệu. Điều này cho phép bạn tăng tốc quá trình khôi phục bằng cách loại bỏ nhu cầu tính toán số liệu thống kê bằng lệnh VACUUM ANALYZE sau khi khôi phục.
    9. Đã thêm mô-đun JSQuery cho phép ngôn ngữ đặc biệt xây dựng các truy vấn tới các trường loại JSONB có hỗ trợ chỉ mục GIN.
    10. Mô-đun này cung cấp một kiểu dữ liệu bổ sung để tương thích với Microsoft SQL Máy chủ.
    11. Mô-đun này cung cấp một toán tử đẳng thức bổ sung để tương thích với Microsoft SQL Server.
    12. Mô-đun này cung cấp một chức năng không an toàn về mặt giao dịch để cắt bớt các bảng tạm thời, ngăn không cho thư mục pg_class phát triển.
    13. Mô-đun này cung cấp một tập hợp các chức năng cập nhật ngay lập tức số liệu thống kê trên các bảng mục tiêu sau các thao tác CHÈN, CẬP NHẬT, XÓA và CHỌN VÀO trên chúng.
    14. Mô-đun này bổ sung hỗ trợ cho các hướng dẫn cho bộ lập lịch, cho phép bạn tắt hoặc bật một số chỉ mục nhất định khi thực hiện truy vấn.

    Bạn có thể tìm hiểu thêm về sự khác biệt giữa PostgreSQL và PostgreSQL trong Bảng so sánh sản phẩm.

    Giấy phép tiêu chuẩn PostgreSQL

    Postgres Pro Standard được phân phối theo giấy phép PostgreSQL với các tiện ích bổ sung Postgres Professional:

    Bản quyền các phần (c) 2015-2019, Postgres Professional
    Các phần Bản quyền (c) 1996-2019, Nhóm Phát triển Toàn cầu PostgreSQL
    Các phần Bản quyền (c) 1994 Regents of the University of California

    Quyền được cấp để sử dụng, sao chép, sửa đổi và phân phối phần mềm này cũng như tài liệu của nó nhằm mục đích thử nghiệm, phát triển phần mềm, làm quen với chức năng của DBMS, sử dụng trong quá trình giáo dục miễn phí và không cần ký kết bất kỳ thỏa thuận nào, với điều kiện là thông báo bản quyền ở trên, đoạn hiện tại và bốn đoạn sau đây được cung cấp cùng với mỗi bản sao. Sử dụng cho các mục đích khác, tích hợp vào các sản phẩm khác, sao chép và các hành động khác yêu cầu mua giấy phép riêng.

    Đại học California không chịu trách nhiệm pháp lý đối với bất kỳ thiệt hại nào, bao gồm mất thu nhập, phát sinh trực tiếp hoặc gián tiếp, đặc biệt hoặc ngẫu nhiên, từ việc sử dụng phần mềm này hoặc tài liệu của nó, ngay cả khi Đại học California đã được thông báo về khả năng xảy ra những thiệt hại đó .

    Đại học California đặc biệt từ chối mọi bảo đảm dưới bất kỳ hình thức nào, bao gồm nhưng không giới hạn ở các bảo đảm ngụ ý về khả năng bán được hoặc sự phù hợp cho một mục đích cụ thể. Phần mềm này được cung cấp trên cơ sở "nguyên trạng" và Đại học California không có nghĩa vụ cung cấp bảo trì, hỗ trợ, cập nhật, cải tiến hoặc sửa đổi.

    Công ty trách nhiệm hữu hạn chuyên nghiệp Postgres không chịu trách nhiệm pháp lý đối với bất kỳ thiệt hại nào, bao gồm mất thu nhập, do việc sử dụng trực tiếp hoặc gián tiếp, đặc biệt hoặc ngẫu nhiên phần mềm này hoặc tài liệu của nó, ngay cả khi Công ty trách nhiệm hữu hạn chuyên nghiệp Postgres đã được thông báo về khả năng xảy ra thiệt hại đó .

    Công ty trách nhiệm hữu hạn chuyên nghiệp Postgres đặc biệt từ chối mọi bảo đảm, bao gồm nhưng không giới hạn ở các bảo đảm ngụ ý về khả năng bán được hoặc sự phù hợp cho một mục đích cụ thể. Phần mềm này được cung cấp trên cơ sở "nguyên trạng" và Công ty trách nhiệm hữu hạn chuyên nghiệp Postgres không có nghĩa vụ cung cấp dịch vụ bảo trì, hỗ trợ, cập nhật, tiện ích mở rộng hoặc thay đổi.