Lý do tại sao điều này hoạt động trong PostgreSQL là các danh mục hệ thống là các bảng thông thường. Vì vậy, việc tạo một hàm mới, chẳng hạn, chỉ cần yêu cầu chèn một hàng vào pg_proc
bảng, thay đổi giá trị mặc định của cột chỉ cần thực hiện cập nhật cho một số hàng pg_attrdef
, v.v. Vì các bảng là giao dịch dù sao đi nữa, bạn gần như phải đi ra ngoài để không làm cho nó hoạt động theo cách đó. (Rất nhiều chi tiết thực hiện đau đớn được bỏ qua ở đây.;))
Tôi cho rằng, không biết mã nguồn, các công cụ cơ sở dữ liệu khác sử dụng một số cấu trúc bên trong tùy chỉnh để thể hiện thông tin danh mục hệ thống của họ. Và vì vậy, họ sẽ phải nỗ lực nhiều hơn, rất nhiều nỗ lực có khả năng, để làm cho DDL giao dịch hoạt động và dường như đó không phải là ưu tiên của họ.
Mặt trái của điều này là đây là lý do tại sao các bản nâng cấp phiên bản lớn của PostgreSQL rất đau đớn. Các sản phẩm khác có thể thiết kế cấu trúc siêu dữ liệu nội bộ của chúng với các thay đổi và cập nhật trong tâm trí, và do đó không có vấn đề gì với việc nâng cấp lên phiên bản chính mới. Trong PostgreSQL, không có cách nào để thay đổi bảng danh mục hệ thống để đột nhiên trông giống như một phiên bản mới hơn của bảng danh mục hệ thống, ít nhất là không giữ cho hệ thống trực tuyến, vì điều đó sẽ yêu cầu quyền truy cập vào danh mục hệ thống. Urgh.