Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá hôm nay và ngày mai phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

5.10. Schemas#

APostgreSQLCụm cơ sở dữ liệu chứa một hoặc nhiều cơ sở dữ liệu được đặt tên. Vai trò và một vài loại đối tượng khác được chia sẻ trên toàn bộ cụm.

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ữ liệu trong cụm. Chia sẻ tên vai trò có nghĩa là không thể có kèo bóng đá hôm nay và ngày mai vai trò khác nhau được đặt tên, giả sử,JoeTrong hai cơ sở dữ liệu trong cùng một cụm; Nhưng hệ thống có thể được cấu hình để cho phépJoeChỉ truy cập vào một số cơ sở dữ liệu.

Cơ sở dữ liệu chứa một hoặc nhiều tênSchemas, lần lượt chứa các bảng. Các kèo bóng đá hôm nay và ngày mai đồ cũng chứa các loại đối tượng được đặt tên khác, bao gồm các kiểu dữ liệu, chức năng và toán tử.Schema1MyschemaCó thể chứa kèo bóng đá hôm nay và ngày mai bảng có tênMyTable. Không giống như cơ sở dữ liệu, các kèo bóng đá hôm nay và ngày mai đồ 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 đá hôm nay và ngày mai đồ nào trong cơ sở dữ liệu mà chúng được kết nối, nếu chúng 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 các kèo bóng đá hôm nay và ngày mai đồ:

  • Để cho phép nhiều người dùng sử dụng một cơ sở dữ liệu mà không can thiệp vào nhau.

  • Để tổ chức kèo bóng đá hôm nay và ngày mai đối tượng cơ sở dữ liệu thành kèo bóng đá hôm nay và ngày mai nhóm logic để làm cho chúng 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 đá hôm nay và ngày mai đồ riêng biệt để chúng 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 ở cấp hệ điều hành, ngoại trừ các kèo bóng đá hôm nay và ngày mai đồ không thể lồng nhau.

5.10.1. Tạo kèo bóng đá hôm nay và ngày mai đồ#

Để tạo kèo bóng đá hôm nay và ngày mai đồ, sử dụngTạo kèo bóng đá hôm nay và ngày mai đồLệnh. Đặt cho kèo bóng đá hôm nay và ngày mai đồ một tên của sự lựa chọn của bạn.

Tạo kèo bóng đá hôm nay và ngày mai đồ myschema;

Để tạo hoặc truy cập các đối tượng trong kèo bóng đá hôm nay và ngày mai đồ, viết ATên đủ điều kiệnbao gồm tên kèo bóng đá hôm nay và ngày mai đồ và tên bảng được phân tách bằng một dấu chấm:

kèo bóng đá hôm nay và ngày mai đồ.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 kèo bóng đá hôm nay và ngày mai lệnh sửa đổi bảng và kèo bóng đá hôm nay và ngày mai lệnh truy cập dữ liệu được thảo luận trong kèo bóng đá hôm nay và ngày mai chương sau. .

Trên thực tế, cú pháp thậm chí còn chung hơn

Cơ sở dữ liệu.kèo bóng đá hôm nay và ngày mai đồ.Bảng

cũng có thể được sử dụng, nhưng hiện tại đây chỉ là để tuân thủ Forma với tiêu chuẩn SQL. Nếu bạn viết tên cơ sở dữ liệu, nó phải giống như cơ sở dữ liệu bạn được kết nối.

Vì vậy, để tạo một bảng trong kèo bóng đá hôm nay và ngày mai đồ mới, sử dụng:

Tạo bảng myschema.mytable (

Để thả một kèo bóng đá hôm nay và ngày mai đồ nếu nó trống (tất cả các đối tượng trong đó đã bị loại bỏ), sử dụng:

Drop Schema myschema;

Để bỏ một kèo bóng đá hôm nay và ngày mai đồ bao gồm tất cả các đối tượng chứa, sử dụng:

Drop Schema MySchema Cascade;

xemPhần 5.15Để 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 đá hôm nay và ngày mai đồ 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 đối với các không gian tên được xác định rõ). Cú pháp cho đó là:

Tạo kèo bóng đá hôm nay và ngày mai đồSchema_nameủy quyềnuser_name;

Bạn thậm chí có thể bỏ qua tên kèo bóng đá hôm nay và ngày mai đồ, trong trường hợp đó, tên kèo bóng đá hôm nay và ngày mai đồ sẽ giống như tên người dùng. Nhìn thấyPhần 5.10.6Để biết làm thế nào điều này có thể hữu ích.

Tên kèo bóng đá hôm nay và ngày mai đồ bắt đầu bằngPG_được dành riêng cho mục đích hệ thống và không thể được tạo bởi người dùng.

5.10.2. kèo bóng đá hôm nay và ngày mai đồ công khai#

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 đá hôm nay và ngày mai đồ nào. Theo mặc định, các bảng như vậy (và các đối tượng khác) được tự động đưa vào một kèo bóng đá hôm nay và ngày mai đồ có têncông khaiHàng. Mỗi cơ sở dữ liệu mới đều chứa một kèo bóng đá hôm nay và ngày mai đồ như vậy.

Tạo sản phẩm bảng (...);

và:

Tạo bảng công khai.products (...);

5.10.3. Đường dẫn tìm kiếm kèo bóng đá hôm nay và ngày mai đồ#

Tên đủ điều kiện là tẻ nhạt để viết, và tốt nhất là không nên không đưa một tên kèo bóng đá hôm nay và ngày mai đồ 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 bằng cách theo dõiĐường dẫn tìm kiếm, đây là danh sách các kèo bóng đá hôm nay và ngày mai đồ để xem xét. Bảng phù hợp đầu tiên trong đường dẫn tìm kiếm được coi là người bị truy nã. Nếu không có khớp trong đường dẫn tìm kiếm, một lỗi được báo cáo, ngay cả khi các tên bảng khớp tồn tại trong các kèo bóng đá hôm nay và ngày mai đồ khác trong cơ sở dữ liệu.

Khả năng tạo các đối tượng giống như có tên trong các kèo bóng đá hôm nay và ngày mai đồ khác nhau làm phức tạp việc viết một truy vấn tham khảo chính xác cùng một đối tượng mỗi lần. Nó cũng mở ra tiềm năng cho người dùng thay đổi hành vi của các truy vấn của người dùng khác, một cách độc hại hoặc vô tình.PostgreSQLbên trong, thêm một kèo bóng đá hôm nay và ngày mai đồ vàosearch_pathTin tưởng hiệu quả tất cả người dùng cóTạoĐặc quyền trên kèo bóng đá hôm nay và ngày mai đồ đó. Khi bạn chạy một truy vấn thông thường, một người dùng độc hại có thể tạo các đối tượng trong kèo bóng đá hôm nay và ngày mai đồ đường dẫn tìm kiếm của bạn có thể kiểm soát và thực thi các hàm SQL tùy ý như thể bạn đã thực thi chúng.

kèo bóng đá hôm nay và ngày mai đồ đầu tiên có tên trong đường dẫn tìm kiếm được gọi là kèo bóng đá hôm nay và ngày mai đồ hiện tại. Bên cạnh việc tìm kiếm kèo bóng đá hôm nay và ngày mai đồ đầu tiên được tìm kiếm, nó còn là kèo bóng đá hôm nay và ngày mai đồ trong đó các bảng mới sẽ được tạo nếuTạo bảngLệnh không chỉ định tên kèo bóng đá hôm nay và ngày mai đồ.

Để hiển thị đường dẫn tìm kiếm hiện tại, hãy sử dụng lệnh sau:

show search_path;

Trong thiết lập mặc định này trả về:

search_path

Phần tử đầu tiên chỉ định rằng một kèo bóng đá hôm nay và ngày mai đồ có cùng tên với người dùng hiện tại sẽ được tìm kiếm. Nếu không có kèo bóng đá hôm nay và ngày mai đồ như vậy tồn tại, mục nhập bị bỏ qua.

kèo bóng đá hôm nay và ngày mai đồ đầ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 mà các đối tượng mặc định được tạo trong kèo bóng đá hôm nay và ngày mai đồ công khai.

Để đặt kèo bóng đá hôm nay và ngày mai đồ 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ó nhu cầu ngay lập tức.) Và sau đó chúng tôi có thể truy cập bảng mà không cần trình độ học vấn:

BẢNG BẢNG MyTable;

Ngoài ra, kể từMyschemalà phần tử đầu tiên trong đường dẫn, kèo bóng đá hôm nay và ngày mai đối tượng mới theo mặc định sẽ được tạo trong đó.

​​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 đá hôm nay và ngày mai đồ công khai mà không có trình độ rõ ràng. Không có gì đặc biệt về kèo bóng đá hôm nay và ngày mai đồ công khai ngoại trừ nó tồn tại theo mặc định.

Xem thêmPhần 9.27Đối với các cách khác để thao túng đường dẫn tìm kiếm kèo bóng đá hôm nay và ngày mai đồ.

Đường dẫn tìm kiếm hoạt động theo cùng một cách cho tên kiểu dữ liệu, tên chức năng và tên toán tử như đối với tên bảng. Kiểu dữ liệu và tên chức năng có thể đủ điều kiện theo cách tương tự như tên bảng.

Toán tử (kèo bóng đá hôm nay và ngày mai đồ.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 cho kèo bóng đá hôm nay và ngày mai toán tử, để không phải viết bất cứ điều gì xấu xí như vậy.

5.10.4. Các kèo bóng đá hôm nay và ngày mai đồ và đặc quyền#

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 đá hôm nay và ngày mai đồ mà họ không sở hữu. Để cho phép điều đó, chủ sở hữu của kèo bóng đá hôm nay và ngày mai đồ phải cấpsử dụngĐặc quyền trên kèo bóng đá hôm nay và ngày mai đồ. Theo mặc định, mọi người đều có đặc quyền đó trên kèo bóng đá hôm nay và ngày mai đồcông khai. Để cho phép người dùng sử dụng các đối tượng trong kèo bóng đá hôm nay và ngày mai đồ, các đặc quyền bổ sung có thể cần phải đượ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 các đối tượng trong kèo bóng đá hôm nay và ngày mai đồ của người khác. Để cho phép điều đó,TạoĐặc quyền về kèo bóng đá hôm nay và ngày mai đồ cần được cấp. Trong cơ sở dữ liệu được nâng cấp từPostgreSQL14 hoặc sớm hơn, mọi người đều có đặc quyền đó trên kèo bóng đá hôm nay và ngày mai đồcông khai. Một sốmẫu sử dụngGọi để thu hồi đặc quyền đó:

Thu hồi Creat trên kèo bóng đá hôm nay và ngày mai đồ công khai từ công khai;

(lần đầu tiênHồicông khailà kèo bóng đá hôm nay và ngày mai đồ, thứ haicông khaixôngcó nghĩa làMạnhMỗi người dùngHồi. 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;Phần 4.1.1.)

5.10.5. kèo bóng đá hôm nay và ngày mai đồ danh mục hệ thống#

Ngoàicông khaivà các kèo bóng đá hôm nay và ngày mai đồ do người dùng tạo, mỗi cơ sở dữ liệu chứa mộtpg_catalogkèo bóng đá hôm nay và ngày mai đồ, chứa các bảng hệ thống và tất cả các loại dữ liệu, chức năng và toán tử tích hợp.pg_catalogluôn là 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 đá hôm nay và ngày mai đồ của đường dẫn. Điều này đảm bảo rằng các tên tích hợp sẽ luôn luôn có thể tìm thấy.pg_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.

Vì tên bảng hệ thống bắt đầu bằngPG_, Tốt nhất là 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 định nghĩa 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 tên bảng của bạn sau đó sẽ được giải quyết dưới dạng bảng hệ thống.)pg_, để họ không xung đột với kèo bóng đá hôm nay và ngày mai 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ố.

5.10.6. Mẫu sử dụng#

Các kèo bóng đá hôm nay và ngày mai đồ có thể được sử dụng để sắp xếp dữ liệu của bạn theo nhiều cách. MỘTmẫu sử dụng kèo bóng đá hôm nay và ngày mai đồ an toànNgăn chặn người dùng không tin tưởng thay đổi hành vi của các truy vấn của người dùng khác. Khi cơ sở dữ liệu không sử dụng mẫu sử dụng kèo bóng đá hôm nay và ngày mai đồ an toàn, người dùng muốn truy vấn an toàn rằng cơ sở dữ liệu sẽ có hành động bảo vệ ở đầu mỗi phiên.search_path27074_27168search_path. Có một vài mẫu sử dụng dễ dàng được hỗ trợ bởi cấu hình mặc định:

  • CRALAIN Người dùng thông thường đối với các kèo bóng đá hôm nay và ngày mai đồ người dùng-tư. Để thực hiện mẫu này, trước tiên hãy đảm bảo rằng không có kèo bóng đá hôm nay và ngày mai đồ nào có công khaiTạoĐặc quyền. Sau đó, đối với mọi người dùng cần tạo các đối tượng phi ngữ nghĩa, hãy tạo một kèo bóng đá hôm nay và ngày mai đồ có cùng tên với người dùng đó, ví dụTạo kèo bóng đá hôm nay và ngày mai đồ Alice Alice Alice. (Nhớ lại rằng đường dẫn tìm kiếm mặc định bắt đầu bằng$ 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 đá hôm nay và ngày mai đồ riêng biệt, họ sẽ truy cập các kèo bóng đá hôm nay và ngày mai đồ của riêng họ theo mặc định.) Mẫu này là mẫu sử dụng kèo bóng đá hôm nay và ngày mai đồ an toàn trừ khi người dùng không tin tưởng là chủ sở hữu cơ sở dữ liệu hoặc đã được cấpTùy chọn quản trịVề vai trò có liên quan, trong trường hợp đó không có mẫu sử dụng kèo bóng đá hôm nay và ngày mai đồ an toàn nào tồn tại.

    inPostgreSQL15 trở lên, cấu hình mặc định hỗ trợ mẫu sử dụng này. Trong kèo bóng đá hôm nay và ngày mai phiên bản trước hoặc khi sử dụng cơ sở dữ liệu đã được nâng cấp từ phiên bản trước, bạn sẽ cần phải xóa công khaiTạoĐặc quyền từcông khaikèo bóng đá hôm nay và ngày mai đồ (sốThu hồi Creat trên kèo bóng đá hôm nay và ngày mai đồ công khai từ công khai). Sau đó xem xét kiểm toáncông khaikèo bóng đá hôm nay và ngày mai đồ cho các đối tượng có tên giống như đối tượng trong kèo bóng đá hôm nay và ngày mai đồpg_catalog.

  • Xóa kèo bóng đá hôm nay và ngày mai đồ công khai khỏi đường dẫn tìm kiếm mặc định, bằng cách sửa đổiPostgreSql.confhoặc bằng cách phát hànhVai trò thay đổi tất cả kèo bóng đá hôm nay và ngày mai set search_path = "$ user". Sau đó, cấp đặc quyền để tạo trong kèo bóng đá hôm nay và ngày mai đồ công khai.Sẽ không an toàn hoặc không đáng tin cậy. Nếu bạn tạo các chức năng hoặc tiện ích mở rộng trong kèo bóng đá hôm nay và ngày mai đồ công khai, hãy sử dụng mẫu đầu tiên thay thế.Tùy chọn quản trịVề vai trò có liên quan.

  • Giữ đường dẫn tìm kiếm mặc định và cấp đặc quyền để tạo trong kèo bóng đá hôm nay và ngày mai đồ công khai. Tất cả người dùng truy cập vào kèo bóng đá hôm nay và ngày mai đồ công khai ngầm.PostgreSQL14 hoặc sớm hơn, đây là mặc định.

Đối với bất kỳ mẫu nào, để 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, v.v.), đưa chúng vào các kèo bóng đá hôm nay và ngày mai đồ riêng biệt. Hãy nhớ cấp các đặc quyền thích hợp để cho phép người dùng khác truy cập họ.

5.10.7. Tính di động#

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 đá hôm nay và ngày mai đồ được sở hữu bởi những người dùng khác nhau không tồn tại. Hơn nữa, một số triển khai không cho phép bạn tạo các kèo bóng đá hôm nay và ngày mai đồ có tên khác với chủ sở hữu của họ.user_name.Table_Name. Đây là cáchPostgreSQLsẽ hoạt động hiệu quả nếu bạn tạo kèo bóng đá hôm nay và ngày mai đồ 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 đá hôm nay và ngày mai đồ trong tiêu chuẩn SQL. Để phù hợp tối đa với tiêu chuẩn, bạn không nên sử dụngcông khaikèo bóng đá hôm nay và ngày mai đồ.

Tất nhiên, một số hệ thống cơ sở dữ liệu SQL có thể không thực hiện các kèo bóng đá hôm nay và ngày mai đồ 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 đó, thì 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 đá hôm nay và ngày mai đồ.