Postgresql 9.0.23 Tài kèo bóng đá pháp | ||||
---|---|---|---|---|
prev | UP | Chương 5. Định nghĩa dữ kèo bóng đá pháp | Tiếp theo |
APostgreSQLCụm cơ sở dữ kèo bóng đá pháp chứa một hoặc nhiều cơ sở dữ kèo bóng đá pháp được đặt tên. Người dùng và nhóm người dùng được chia sẻ trên toàn bộ cụm, nhưng không có dữ kèo bóng đá pháp nào khác được chia sẻ trên cơ sở dữ kèo bóng đá pháp. Bất kỳ kết nối máy khách nào với máy chủ có thể Chỉ truy cập dữ kèo bóng đá pháp trong một cơ sở dữ kèo bóng đá pháp duy nhất, dữ kèo bóng đá pháp được chỉ định trong yêu cầu kết nối.
Lưu ý:Người dùng của cụm không nhất thiết phải có Đặc quyền truy cập mọi cơ sở dữ kèo bóng đá pháp trong cụm. Chia sẻ tên người dùng có nghĩa là không thể có Người dùng có tên, nói,JoeTrong hai cơ sở dữ kèo bóng đá pháp trong cùng một cụm; Nhưng hệ thống có thể được định cấu hình để cho phépJoeTruy cập vào Chỉ một số cơ sở dữ kèo bóng đá pháp.
Cơ sở dữ kèo bóng đá pháp chứa một hoặc nhiều tênSchemas, lần lượt chứa các bảng. kèo bóng đá pháp đồ cũng chứa các loại đối tượng được đặt tên khác, bao gồm các loại dữ liệu, chức năng, và người vận hành. Cùng một tên đối tượng có thể được sử dụng trong Các kèo bóng đá pháp đồ khác nhau không có xung đột; Ví dụ, cả haiSchema1vàMyschemacó thể chứa kèo bóng đá pháp bảng có tênMyTable. Không giống như Cơ sở dữ liệu, các kèo bóng đá pháp đồ không được phân tách một cách cứng nhắc: Người dùng có thể truy cập các đối tượng trong bất kỳ kèo bóng đá pháp đồ nào trong cơ sở dữ liệu mà anh ta được kết nối, Nếu anh ấy có đặc quyền làm như vậy.
Có một số lý do tại sao người ta có thể muốn sử dụng Schemas:
Để cho phép nhiều người dùng sử dụng một cơ sở dữ kèo bóng đá pháp mà không cần can thiệp vào nhau.
Để tổ chức kèo bóng đá pháp đối tượng cơ sở dữ liệu thành kèo bóng đá pháp nhóm logic để thực hiện họ dễ quản lý hơn.
Các ứng dụng của bên thứ ba có thể được đưa vào các kèo bóng đá pháp đồ riêng biệt Vì vậy, họ không va chạm với tên của các đối tượng khác.
Schemas tương tự như các thư mục tại hệ điều hành cấp độ, ngoại trừ các kèo bóng đá pháp đồ không thể lồng nhau.
Để tạo kèo bóng đá pháp đồ, sử dụngTạo kèo bóng đá pháp đồlệnh. Cho kèo bóng đá pháp đồ một tên của sự lựa chọn của bạn. Ví dụ:
Tạo kèo bóng đá pháp đồ myschema;
Để tạo hoặc truy cập các đối tượng trong kèo bóng đá pháp đồ, viết ATên đủ điều kiệnBao gồm tên kèo bóng đá pháp đồ và tên bảng được phân tách bởi một dấu chấm:
kèo bóng đá pháp đồ.Bảng
Điều này hoạt động ở bất cứ đâu một tên bảng được mong đợi, bao gồm cả kèo bóng đá pháp lệnh sửa đổi bảng và kèo bóng đá pháp lệnh truy cập dữ liệu thảo luận trong kèo bóng đá pháp chương sau. (Vì ngắn gọn, chúng ta sẽ nói chỉ có kèo bóng đá pháp bảng, nhưng những ý tưởng tương tự áp dụng cho kèo bóng đá pháp loại kèo bóng đá pháp đối tượng được đặt tên, chẳng hạn như kèo bóng đá pháp loại và chức năng.)
Trên thực tế, cú pháp thậm chí còn chung hơn
Cơ sở dữ kèo bóng đá pháp.kèo bóng đá pháp đồ.Bảng
cũng có thể được sử dụng, nhưng hiện tại đây chỉ là choPro FormaTuân thủ tiêu chuẩn SQL. Nếu bạn viết tên cơ sở dữ kèo bóng đá pháp, nó phải giống như cơ sở dữ kèo bóng đá pháp bạn được kết nối với.
Vì vậy, để tạo một bảng trong kèo bóng đá pháp đồ mới, sử dụng:
Tạo bảng myschema.mytable ( ... );
Để bỏ một kèo bóng đá pháp đồ nếu nó trống (tất cả các đối tượng trong đó đã bỏ), sử dụng:
Drop Schema myschema;
Để bỏ một kèo bóng đá pháp đồ bao gồm tất cả các đối tượng có chứa, sử dụng:
Drop Schema MySchema Cascade;
xemPhần 5.11cho a Mô tả về cơ chế chung đằng sau điều này.
Thường thì bạn sẽ muốn tạo một kèo bóng đá pháp đồ thuộc sở hữu của người khác (Vì đây là một trong những cách để hạn chế các hoạt động của Người dùng của bạn đến các không gian tên được xác định rõ). Cú pháp cho điều đó là:
Tạo kèo bóng đá pháp đồSchemanameủy quyềntên người dùng;
Bạn thậm chí có thể bỏ qua tên kèo bóng đá pháp đồ, trong trường hợp đó, kèo bóng đá pháp đồ Tên sẽ giống như tên người dùng. Nhìn thấyPhần 5.7.6cho Làm thế nào điều này có thể hữu ích.
Tên kèo bóng đá pháp đồ bắt đầu bằngpg_là dành riêng cho mục đích hệ thống và không thể được tạo bởi người dùng.
Trong các phần trước, chúng tôi đã tạo các bảng mà không chỉ định bất kỳ tên kèo bóng đá pháp đồ. Theo mặc định, các bảng như vậy (và các bảng khác các đối tượng) được tự động đưa vào một kèo bóng đá pháp đồ có tên"công khai". Mỗi cơ sở dữ liệu mới đều chứa một kèo bóng đá pháp đồ. Do đó, những điều sau đây tương đương:
Tạo sản phẩm bảng (...);
và:
Tạo bảng công khai. Products (...);
Tên đủ điều kiện là tẻ nhạt để viết, và nó thường tốt nhất Không thể kết nối một tên kèo bóng đá pháp đồ cụ thể vào các ứng dụng. Do đó, các bảng thường được đề cập bởiTên không đủ tiêu chuẩn, chỉ bao gồm Tên bảng. Hệ thống xác định bảng nào có nghĩa là Theo dõi Ađường dẫn tìm kiếm, là một Danh sách các kèo bóng đá pháp đồ để xem vào. Bảng phù hợp đầu tiên trong Đường dẫn tìm kiếm được thực hiện để trở thành người muốn. Nếu không có trận đấu Trong đường dẫn tìm kiếm, một lỗi được báo cáo, ngay cả khi khớp Tên bảng tồn tại trong các kèo bóng đá pháp đồ khác trong cơ sở dữ liệu.
kèo bóng đá pháp đồ đầu tiên có tên trong đường dẫn tìm kiếm được gọi là kèo bóng đá pháp đồ hiện tại. Ngoài việc là kèo bóng đá pháp đồ đầu tiên được tìm kiếm, nó cũng là kèo bóng đá pháp đồ trong đó các bảng mới sẽ được tạo nếuTạo bảngLệnh không chỉ định một tên kèo bóng đá pháp đồ.
Để hiển thị đường dẫn tìm kiếm hiện tại, sử dụng kèo bóng đá pháp mục sau yêu cầu:
show search_path;
Trong thiết lập mặc định này trả về:
search_path -------------- "$ user", công khai
Phần tử đầu tiên chỉ định rằng kèo bóng đá pháp đồ có cùng tên như người dùng hiện tại sẽ được tìm kiếm. Nếu không có kèo bóng đá pháp đồ như vậy tồn tại, mục nhập bị bỏ qua. Phần tử thứ hai đề cập đến kèo bóng đá pháp đồ công khai mà chúng ta đã thấy rồi.
kèo bóng đá pháp đồ đầu tiên trong đường dẫn tìm kiếm tồn tại là Vị trí mặc định để tạo các đối tượng mới. Đó là lý do rằng các đối tượng mặc định được tạo trong kèo bóng đá pháp đồ công khai. Khi Các đối tượng được tham chiếu trong bất kỳ ngữ cảnh nào khác mà không có kèo bóng đá pháp đồ Trình độ chuyên môn (sửa đổi bảng, sửa đổi dữ liệu hoặc truy vấn các lệnh) Đường dẫn tìm kiếm được đi qua cho đến khi một đối tượng phù hợp được tìm thấy. Do đó, trong cấu hình mặc định, bất kỳ Truy cập không đủ tiêu chuẩn một lần nữa chỉ có thể đề cập đến công chúng kèo bóng đá pháp đồ.
Để đặt kèo bóng đá pháp đồ mới của chúng tôi vào đường dẫn, chúng tôi sử dụng:
Đặt search_path thành myschema, công khai;
(Chúng tôi bỏ qua$ userỞ đây vì chúng tôi không cần ngay lập tức cho nó.) Và sau đó chúng ta có thể truy cập Bảng không có trình độ kèo bóng đá pháp đồ:
Drop Table myTable;
Ngoài ra, kể từMyschemalà lần đầu tiên phần tử trong đường dẫn, kèo bóng đá pháp đối tượng mới theo mặc định sẽ được tạo trong Nó.
Chúng tôi cũng có thể đã viết:
Đặt search_path thành myschema;
Sau đó, chúng tôi không còn quyền truy cập vào kèo bóng đá pháp đồ công khai mà không có Trình độ chuyên môn rõ ràng. Không có gì đặc biệt về kèo bóng đá pháp đồ công khai ngoại trừ nó tồn tại theo mặc định. Nó có thể được cũng bị rơi.
Xem thêmPhần 9,23cho các cách khác để thao tác đường dẫn tìm kiếm kèo bóng đá pháp đồ.
Đường dẫn tìm kiếm hoạt động theo cùng một cách cho tên kiểu dữ kèo bóng đá pháp, Tên chức năng và tên toán tử như nó làm cho tên bảng. Kiểu dữ kèo bóng đá pháp và tên chức năng có thể đủ điều kiện trong chính xác Tương tự như tên bảng. Nếu bạn cần viết một Tên người vận hành Trong một biểu thức, có một điều khoản đặc biệt: Bạn phải viết
toán tử (kèo bóng đá pháp đồ.Nhà điều hành)
Điều này là cần thiết để tránh sự mơ hồ của cú pháp. Một ví dụ là:
Chọn 3 toán tử (pg_catalog.+) 4;
Trong thực tế, người ta thường dựa vào đường dẫn tìm kiếm người vận hành, để không phải viết bất cứ điều gì xấu xí như cái đó.
Theo mặc định, người dùng không thể truy cập bất kỳ đối tượng nào trong các kèo bóng đá pháp đồ họ Không sở hữu. Để cho phép điều đó, chủ sở hữu của kèo bóng đá pháp đồ phải cấp Thesử dụngĐặc quyền trên kèo bóng đá pháp đồ. ĐẾN Cho phép người dùng sử dụng các đối tượng trong kèo bóng đá pháp đồ, các đặc quyền bổ sung có thể cần được cấp, khi thích hợp cho đối tượng.
Người dùng cũng có thể được phép tạo đối tượng trong ai đó kèo bóng đá pháp đồ khác. Để cho phép điều đó,TạoĐặc quyền về kèo bóng đá pháp đồ cần phải được giả dụ như vậy. Lưu ý rằng theo mặc định, mọi người đều cóTạovàsử dụngĐặc quyền trên kèo bóng đá pháp đồcông khai. Cái này Cho phép tất cả người dùng có thể kết nối với một cơ sở dữ liệu nhất định Để tạo kèo bóng đá pháp đối tượng trongcông khaikèo bóng đá pháp đồ. Nếu bạn không muốn cho phép điều đó, bạn có thể thu hồi điều đó Đặc quyền:
Thu hồi Creat trên kèo bóng đá pháp đồ công khai từ công khai;
(lần đầu tiên"công khai"là kèo bóng đá pháp đồ, thứ hai"công khai"có nghĩa là"Mỗi người dùng". Theo nghĩa đầu tiên nó là một định danh, theo nghĩa thứ hai, nó là một từ khóa, do đó vốn hóa khác nhau; Nhớ lại kèo bóng đá pháp hướng dẫn từPhần 4.1.1.)
Ngoàicông khaivà Các kèo bóng đá pháp đồ do người dùng tạo, mỗi cơ sở dữ liệu chứapg_catalogkèo bóng đá pháp đồ, chứa hệ thống các bảng và tất cả các loại dữ liệu, chức năng và người vận hành.pg_catalogluôn luôn một phần hiệu quả của đường dẫn tìm kiếm. Nếu nó không được đặt tên rõ ràng trong đường dẫn thì nó được tìm kiếm ngầmtrướcTìm kiếm Các kèo bóng đá pháp đồ của con đường. Điều này đảm bảo rằng các tên tích hợp sẽ luôn có thể tìm thấy. Tuy nhiên, bạn có thể đặt rõ ràngpg_catalogỞ cuối đường dẫn tìm kiếm của bạn nếu bạn Thích có tên do người dùng xác định ghi đè tên tích hợp.
inPostgreSQLPhiên bản Trước 7.3, tên bảng bắt đầu bằngPG_đã được bảo lưu. Điều này không còn đúng nữa: bạn có thể tạo tên bảng như vậy nếu bạn muốn, trong bất kỳ hệ thống nào kèo bóng đá pháp đồ. Tuy nhiên, tốt nhất là tiếp tục tránh những cái tên như vậy, để Đảm bảo rằng bạn sẽ không bị xung đột nếu một số phiên bản trong tương lai Xác định một bảng hệ thống có tên giống như bảng của bạn. (Với Đường dẫn tìm kiếm mặc định, một tham chiếu không đủ tiêu chuẩn cho bảng của bạn Tên sau đó sẽ được giải quyết làm bảng hệ thống thay thế.) Bảng hệ thống sẽ tiếp tục tuân theo Công ước có Tên bắt đầu bằngpg_, để họ sẽ không xung đột với kèo bóng đá pháp tên bảng người dùng không đủ tiêu chuẩn miễn là Người dùng tránhpg_tiền tố.
Schemas có thể được sử dụng để sắp xếp dữ kèo bóng đá pháp của bạn theo nhiều cách. Có một vài mẫu sử dụng được khuyến nghị và là dễ dàng được hỗ trợ bởi cấu hình mặc định:
Nếu bạn không tạo bất kỳ kèo bóng đá pháp đồ nào thì tất cả người dùng truy cập kèo bóng đá pháp đồ công khai ngầm. Điều này mô phỏng tình hình Trường hợp các kèo bóng đá pháp đồ không có sẵn ở tất cả. Thiết lập này là chủ yếu được đề xuất khi chỉ có một người dùng hoặc Rất ít người dùng hợp tác trong cơ sở dữ liệu. Thiết lập này cũng cho phép Chuyển đổi suôn sẻ từ thế giới không nhận biết.
Bạn có thể tạo kèo bóng đá pháp đồ cho mỗi người dùng có cùng tên như người dùng đó. Hãy nhớ lại rằng đường dẫn tìm kiếm mặc định bắt đầu với$ user, giải quyết cho Tên người dùng. Do đó, nếu mỗi người dùng có một kèo bóng đá pháp đồ riêng biệt, họ truy cập các kèo bóng đá pháp đồ của riêng họ theo mặc định.
Nếu bạn sử dụng thiết lập này thì bạn cũng có thể muốn thu hồi truy cập vào kèo bóng đá pháp đồ công khai (hoặc thả nó hoàn toàn), vì vậy Người dùng thực sự bị hạn chế đối với các kèo bóng đá pháp đồ của riêng họ.
Để cài đặt các ứng dụng được chia sẻ (các bảng được sử dụng bởi Mọi người, các chức năng bổ sung được cung cấp bởi các bên thứ ba, vv), đặt chúng vào các kèo bóng đá pháp đồ riêng biệt. Hãy nhớ cấp Đặc quyền phù hợp để cho phép người dùng khác truy cập họ. Sau đó người dùng có thể tham khảo các đối tượng bổ sung này bằng cách đủ điều kiện các tên có tên kèo bóng đá pháp đồ, hoặc họ có thể đặt các kèo bóng đá pháp đồ bổ sung vào con đường tìm kiếm của họ, khi chúng chọn.
Trong tiêu chuẩn SQL, khái niệm về các đối tượng trong cùng một kèo bóng đá pháp đồ được sở hữu bởi những người dùng khác nhau không tồn tại. Hơn thế nữa, Một số triển khai không cho phép bạn tạo các kèo bóng đá pháp đồ có một tên khác với chủ sở hữu của họ. Trên thực tế, các khái niệm của kèo bóng đá pháp đồ và người dùng gần như tương đương trong hệ thống cơ sở dữ liệu chỉ thực hiện hỗ trợ kèo bóng đá pháp đồ cơ bản được chỉ định trong tiêu chuẩn. Do đó, nhiều người dùng xem xét các tên đủ điều kiện để Thực sự bao gồmtên người dùng.TableName. Đây là cáchPostgreSQLsẽ cư xử hiệu quả nếu bạn tạo kèo bóng đá pháp đồ trên mỗi người dùng cho mọi người dùng.
Ngoài ra, không có khái niệm về Acông khaikèo bóng đá pháp đồ trong tiêu chuẩn SQL. Cho tối đa phù hợp với tiêu chuẩn, bạn không nên sử dụng (có thể thậm chí Xóa) Thecông khaikèo bóng đá pháp đồ.
Tất nhiên, một số hệ thống cơ sở dữ liệu SQL có thể không triển khai Các kèo bóng đá pháp đồ ở tất cả, hoặc cung cấp hỗ trợ không gian tên bằng cách cho phép (có thể hạn chế) truy cập cơ sở dữ liệu chéo. Nếu bạn cần làm việc với các hệ thống đó, sau đó tính di động tối đa sẽ đạt được bằng cách không sử dụng các kèo bóng đá pháp đồ.