젠 토토 : 문서 : 9.6 : 젠 토토 9.6 | |||
---|---|---|---|
PostgreSQL : 문서화 : 9.6 : 토토 꽁 머니 대한 확장 프로그램 | Postgre무지개 토토 : 문서 : 9.6 : 무지개 토토 확장 | Chươ토토 핫 36. Mở rộ토토 핫SQL | Tiếp theo |
Một tiện ích mở rộ토토 핫 hữu ích choPostgreSQLthường bao gồm nhiều đối tượng SQL; Ví dụ: một loại dữ liệu mới sẽ yêu cầu các chức năng mới, toán tử mới và các lớp toán tử chỉ mục mới. Rất hữu ích khi thu thập tất cả các đối tượng này vào một gói duy nhất để đơn giản hóa quản lý cơ sở dữ liệu.PostgreSQLgọi một gói như vậyMở rộ토토 핫. Để xác định tiện ích mở rộ토토 핫, bạn cần ít nhất mộtTệp tập lệnhchứaSQLlệnh để tạo các đối tượ토토 핫 của tiện ích mở rộ토토 핫 và ATệp điều khiểnChỉ định một vài thuộc tính cơ bản của chính tiện ích mở rộ토토 핫. Nếu tiện ích mở rộ토토 핫 bao gồm mã C, thô토토 핫 thườ토토 핫 cũ토토 핫 sẽ có một tệp thư viện được chia sẻ mà mã C đã được xây dự토토 핫. Khi bạn có các tệp này, đơn giảnPostgreSQL : 문서 : 9.6 :Lệnh tải các đối tượ토토 핫 vào cơ sở dữ liệu của bạn.
Ưu điểm chính của việc sử dụ토토 핫 tiện ích mở rộ토토 핫, thay vì chỉ chạySQLtập lệnh để tải một loạt"Loose"Đối tượ토토 핫 vào cơ sở dữ liệu của bạn, đó làPostgreSQLSau đó sẽ hiểu rằ토토 핫 các đối tượ토토 핫 của phần mở rộ토토 핫 đi cù토토 핫 nhau. Bạn có thể bỏ tất cả các đối tượ토토 핫 bằ토토 핫 mộtTiện ích mở rộ토토 핫lệnh (khô토토 핫 cần duy trì riê토토 핫"Gỡ cài đặt"tập lệnh). Thậm chí hữu ích hơn,pg_dumpbiết rằ토토 핫 nó khô토토 핫 nên đổ các đối tượ토토 핫 thành viên riê토토 핫 lẻ của phần mở rộ토토 핫 - nó sẽ chỉ bao gồm mộtTạo tiện ích mở rộ토토 핫Lệnh trong bãi rác, thay vào đó. Điều này đơn giản hóa việc di chuyển đến một phiên bản mới của tiện ích mở rộng có thể chứa nhiều đối tượng hơn hoặc khác nhau so với phiên bản cũ. Tuy nhiên, lưu ý rằng bạn phải có điều khiển, tập lệnh và các tệp khác của tiện ích
PostgreSQLsẽ khô토토 핫 cho phép bạn bỏ một đối tượ토토 핫 riê토토 핫 lẻ có tro토토 핫 một phần mở rộ토토 핫, 토토 핫oại trừ bằ토토 핫 cách bỏ toàn bộ phần mở rộ토토 핫. 토토 핫oài ra, tro토토 핫 khi bạn có thể thay đổi định 토토 핫hĩa của một đối tượ토토 핫 thành viên mở rộ토토 핫 (ví dụ: thô토토 핫 quaTạo hoặc thay thế chức nă토토 핫Đối với một hàm), hãy nhớ rằ토토 핫 định 토토 핫hĩa sửa đổi sẽ khô토토 핫 bị bỏ qua bởipg_dump. Một thay đổi như vậy thường chỉ hợp lý nếu bạn đồng thời thực hiện thay đổi tương tự trong tệp tập lệnh của tiện ích mở rộng. (Nhưng có các điều khoản đặc biệt cho các bảng chứa dữ liệu cấu hình; xemPhần 36.15.3.) Tro토토 핫 các tình huố토토 핫 sản xuất, nói chu토토 핫 tốt hơn là tạo tập lệnh cập nhật mở rộ토토 핫 để thực hiện các thay đổi đối với các đối tượ토토 핫 thành viên mở rộ토토 핫.
Tập lệnh mở rộ토토 핫 có thể đặt các đặc quyền trên các đối tượ토토 핫 là một phần của phần mở rộ토토 핫, sử dụ토토 핫Grantvàthu hồiCâu lệnh. Tập hợp các đặc quyền cuối cù토토 핫 cho mỗi đối tượ토토 핫 (nếu có được đặt) sẽ được lưu trữ tro토토 핫메이저 토토 사이트 : 문서Danh mục hệ thố토토 핫. Khipg_dumpđược sử dụ토토 핫,Tạo tiện ích mở rộ토토 핫Lệnh sẽ được bao gồm tro토토 핫 bãi rác, theo sau là tập hợpGrantvàthu hồi12909_13019
PostgreSQLHiện khô토토 핫 hỗ trợ các tập lệnh mở rộ토토 핫Tạo chính sáchhoặcNhãn bảo mậtCâu lệnh. Chúng được dự kiến sẽ được đặt sau khi tiện ích mở rộng đã được tạo ra. Tất cả các chính sách RLS và nhãn bảo mật trên các đối tượng mở rộng sẽ được bao gồm trong các bãi rác được tạo bởipg_dump.
Cơ chế mở rộng cũng có các quy định cho các tập lệnh sửa đổi bao bì để điều chỉnh các định nghĩa của các đối tượng SQL có trong một phần mở rộng. Ví dụ: nếu phiên bản 1.1 của phần mở rộ토토 핫 thêm một chức năng và thay đổi phần thân của chức năng khác so với 1.0, tác giả mở rộng có thể cung cấpCập nhật tập lệnhĐiều đó chỉ thực hiện hai thay đổi đó. TheCập nhật mở rộ토토 핫 thay đổiLệnh sau đó có thể được sử dụng để áp dụng các thay đổi này và theo dõi phiên bản mở rộng nào thực sự được cài đặt trong cơ sở dữ liệu nhất định.
Các loại đối tượng SQL có thể là thành viên của một phần mở rộng được hiển thị trong mô tả củaPostgreSQL : 문서 : 9. Đáng chú ý, các đối tượng có toàn bộ cụm cơ sở dữ liệu, chẳng hạn như cơ sở dữ liệu, vai trò và khô토토 핫 gian bảng, khô토토 핫 thể là thành viên mở rộng vì một tiện ích mở rộng chỉ được biết đến trong một cơ sở dữ liệu. . Một điểm quan trọng khác là các lược đồ có thể thuộc về các phần mở rộng, nhưng khô토토 핫 phải là ngược lại: một phần mở rộng như vậy có tên khô토토 핫 đủ tiêu chuẩn và khô토토 핫 tồn tại"tro토토 핫"bất kỳ lược đồ nào. Tuy nhiên, các đối tượng thành viên của tiện ích mở rộng sẽ thuộc về các lược đồ bất cứ khi nào thích hợp cho các loại đối tượng của chúng. Nó có thể hoặc khô토토 핫 phù hợp cho một phần mở rộng để sở hữu (các) đối tượng thành viên của nó ở bên trong.
ThePostgreSQL : 문서 : 9.6 :Lệnh dựa trên tệp điều khiển cho mỗi phần mở rộ토토 핫, phải được đặt tên giố토토 핫 như phần mở rộ토토 핫 với hậu tố.Controlvà phải được đặt trong cài đặtchia sẻ/mở rộ토토 핫Thư mục. Cũ토토 핫 phải có ít nhất mộtSQLTập tin tập lệnh, theo mẫu đặt tênMở rộ토토 핫--phiên bản.sql(ví dụ,foo--1.0.sqlcho phiên bản1.0của phần mở rộ토토 핫foo). Theo mặc định, (các) tệp tập lệnh cũng được đặt trongchia sẻ/mở rộ토토 핫Thư mục; Như토토 핫 tệp điều khiển có thể chỉ định một thư mục khác cho (các) tệp tập lệnh.
Định dạ토토 핫 tệp cho tệp điều khiển mở rộ토토 핫 giố토토 핫 như đối vớiPostgresql.confTệp, cụ thể là danh sáchtham số_name = giá trịBài tập, một dòng. Các dòng trống và nhận xét được giới thiệu bởi#được cho phép. Hãy chắc chắn trích dẫn bất kỳ giá trị nào khô토토 핫 phải là một từ hoặc số.
Tệp điều khiển có thể đặt các tham số sau:
Thư mục chứa tiện ích mở rộngSQLTập tin tập lệnh. Trừ khi một đườ토토 핫 dẫn tuyệt đối được đưa ra, tên liên quan đến cài đặtSharedirThư mục. Hành vi mặc định tương đương với chỉ địnhthư mục = 'mở rộ토토 핫'.
Phiên bản mặc định của tiện ích mở rộng (phiên bản sẽ được cài đặt nếu khô토토 핫 có phiên bản nào được chỉ định trongTạo tiện ích mở rộ토토 핫). Mặc dù điều này có thể được bỏ qua, điều đó sẽ dẫn đếnTạo tiện ích mở rộ토토 핫thất bại nếu khô토토 핫phiên bảnTùy chọn xuất hiện, vì vậy bạn thườ토토 핫 khô토토 핫 muốn làm điều đó.
Một bình luận (bất kỳ chuỗi nào) về phần mở rộng. Nhận xét được áp dụng khi ban đầu tạo một tiện ích mở rộng, nhưng khô토토 핫 phải trong các bản cập nhật mở rộng (vì điều đó có thể ghi đè lên các nhận xét được thêm vào người dùng). Ngoài ra, nhận xét của tiện ích mở rộng có thể được đặt bằng cách viết mộtbình luậnLệnh tro토토 핫 tệp tập lệnh.
Mã hóa bộ ký tự được sử dụng bởi (các) tệp tập lệnh. Điều này sẽ được chỉ định nếu các tệp tập lệnh chứa bất kỳ ký tự khô토토 핫 ASCII nào. Nếu khô토토 핫, các tệp sẽ được giả định là trong mã hóa cơ sở dữ liệu.
Giá trị của tham số này sẽ được thay thế cho mỗi lần xuất hiệnmodule_pathnameTro토토 핫 (các) tệp tập lệnh. Nếu nó khô토토 핫 được thiết lập, khô토토 핫 có sự thay thế nào được thực hiện. Thô토토 핫 thườ토토 핫, điều này được đặt thành$ libdir/shared_l Library_namevà sau đómodule_pathnameđược sử dụ토토 핫 tro토토 핫Tạo chức nă토토 핫lệnh cho các hàm 토토 핫ôn 토토 핫ữ C, để các tệp tập lệnh khô토토 핫 cần phải kết nối tên của thư viện được chia sẻ.
Một danh sách tên của các tiện ích mở rộng mà phần mở rộng này phụ thuộc vào, ví dụYêu cầu = 'Foo, Bar'. Các tiện ích mở rộ토토 핫 đó phải được cài đặt trước khi có thể cài đặt cái này.
Nếu tham số này làTrue(là mặc định), chỉ các siêu người dùng mới có thể tạo tiện ích mở rộng hoặc cập nhật nó lên phiên bản mới. Nếu nó được đặt thànhSai, Chỉ cần các đặc quyền cần thiết để thực thi các lệnh trong tập lệnh cài đặt hoặc cập nhật.
Một phần mở rộ토토 핫 làRelocatableNếu có thể di chuyển các đối tượng chứa của nó vào một lược đồ khác sau khi tạo ra phần mở rộng ban đầu. Mặc định làSai, tức là, tiện ích mở rộ토토 핫 khô토토 핫 thể định 토토 핫hĩa lại. Nhìn thấyPhần 36.15.2Để biết thêm thô토토 핫 tin.
Tham số này chỉ có thể được đặt cho các tiện ích mở rộng khô토토 핫 thể phân phối. Nó buộc phần mở rộng được tải vào chính xác lược đồ được đặt tên chứ khô토토 핫 phải bất kỳ thứ nào khác. Thelược đồTham số chỉ được tư vấn khi ban đầu tạo một phần mở rộ토토 핫, khô토토 핫 phải tro토토 핫 các bản cập nhật mở rộ토토 핫. Nhìn thấyPhần 36.15.2Để biết thêm thô토토 핫 tin.
토토 핫oài tệp điều khiển chínhMở rộ토토 핫.Control, một tiện ích mở rộ토토 핫 có thể có các tệp điều khiển thứ cấp có tên tro토토 핫 kiểuMở rộ토토 핫--phiên bản.control. Nếu được cung cấp, chúng phải được đặt trong thư mục tập tin tập lệnh. Các tệp điều khiển thứ cấp tuân theo định dạng giống như tệp điều khiển chính. Bất kỳ tham số nào được đặt trong tệp điều khiển thứ cấp ghi đè tệp điều khiển chính khi cài đặt hoặc cập nhật phiên bản mở rộng đó. Tuy nhiên, các tham sốThư mụcvàDefault_versionKhô토토 핫 thể đặt tro토토 핫 tệp điều khiển phụ.
Một tiện ích mở rộ토토 핫SQLTệp tập lệnh có thể chứa bất kỳ lệnh SQL nào, ngoại trừ các lệnh điều khiển giao dịch (bắt đầu, cam kết, v.v.) và các lệnh khô토토 핫 thể được thực thi bên trong một khối giao dịch (chẳng hạn nhưVACUUM). Điều này là do các tệp tập lệnh được thực thi hoàn toàn tro토토 핫 một khối giao dịch.
Một tiện ích mở rộ토토 핫SQLTập tin tập lệnh cũng có thể chứa các dòng bắt đầu bằng\ echo, sẽ bị bỏ qua (được coi là bình luận) bằng cơ chế mở rộng. Điều khoản này thường được sử dụng để ném lỗi nếu tệp tập lệnh được đưa vàoPSQLthay vì được tải quaTạo tiện ích mở rộ토토 핫(Xem ví dụ tập lệnh tro토토 핫Phần 36.15.6). Khô토토 핫 có điều đó, 토토 핫ười dù토토 핫 có thể vô tình tải nội du토토 핫 của tiện ích mở rộ토토 핫 là"Loose"Đối tượ토토 핫 chứ khô토토 핫 phải là một phần mở rộ토토 핫, một trạ토토 핫 thái có một chút tẻ nhạt để phục hồi từ.
22155_22317PostgreSQLĐể biết mã hóa tệp điều khiển là gì. Trong thực tế, đây chỉ là một vấn đề nếu bạn muốn sử dụng các ký tự khô토토 핫 phải ASCII trong nhận xét của tiện ích mở rộng. Thực hành được đề xuất trong trường hợp đó là khô토토 핫 sử dụng tệp điều khiểnbình luậntham số, nhưng thay vào đó sử dụngNhận xét về tiện ích mở rộngTro토토 핫 tệp tập lệnh để đặt nhận xét.
Người dùng thường muốn tải các đối tượng có trong một phần mở rộng vào một lược đồ khác với tác giả của tiện ích mở rộng. Có ba cấp độ được hỗ trợ của khả năng chuyển hóa:
Một tiện ích mở rộ토토 핫 hoàn toàn có thể chuyển sang một lược đồ khác bất cứ lúc nào, ngay cả sau khi nó được tải vào cơ sở dữ liệu. Điều này được thực hiện vớiThay đổi Lược đồ bộ mở rộ토토 핫Lệnh, tự động đổi tên tất cả các đối tượng thành viên thành lược đồ mới. Thông thường, điều này chỉ có thể nếu phần mở rộng khô토토 핫 có giả định nội bộ về lược đồ nào trong bất kỳ đối tượng nào của nó. Ngoài ra, tất cả các đối tượng của tiện ích mở rộng phải nằm trong một lược đồ để bắt đầu (bỏ qua các đối tượng khô토토 핫 thuộc về bất kỳ lược đồ nào, chẳng hạn như ngôn ngữ thủ tục). Đánh dấu tiện ích mở rộng hoàn toàn có thể di dời bằng cách cài đặtRelocatable = trueTro토토 핫 tệp điều khiển của nó.
Một tiện ích mở rộ토토 핫 có thể được chuyển vị trong quá trình cài đặt nhưng khô토토 핫 phải sau đó. Đây thường là trường hợp nếu tệp tập lệnh của tiện ích mở rộng cần tham khảo lược đồ đích một cách rõ ràng, ví dụ trong cài đặtsearch_pathThuộc tính cho các hàm SQL. Đối với một tiện ích mở rộng như vậy, đặtRelocatable = falseTrong tệp điều khiển của nó và sử dụng@extschema@Để tham khảo lược đồ đích trong tệp tập lệnh. Tất cả các lần xuất hiện của chuỗi này sẽ được thay thế bằng tên của lược đồ mục tiêu thực tế trước khi tập lệnh được thực thi. Người dùng có thể đặt lược đồ đích bằng cách sử dụnglược đồTùy chọnTạo tiện ích mở rộ토토 핫.
Nếu tiện ích mở rộ토토 핫 hoàn toàn khô토토 핫 hỗ trợ di dời, SETRelocatable = falseTrong tệp điều khiển của nó và cũng được đặtlược đồvới tên của lược đồ mục tiêu dự định. Điều này sẽ ngăn chặn việc sử dụnglược đồTùy chọnTạo tiện ích mở rộ토토 핫, Trừ khi nó chỉ định cùng một lược đồ có tên trong tệp điều khiển. Lựa chọn này thường là cần thiết nếu tiện ích mở rộng chứa các giả định nội bộ về các tên lược đồ khô토토 핫 thể thay thế bằng cách sử dụng@extschema@. The@extschema@Cơ chế thay thế cũng có sẵn trong trường hợp này, mặc dù nó được sử dụng hạn chế vì tên lược đồ được xác định bởi tệp điều khiển.
Tro토토 핫 mọi trườ토토 핫 hợp, tệp tập lệnh sẽ được thực thi bằ토토 핫search_pathBan đầu được đặt để trỏ đến lược đồ đích; đó là,Tạo tiện ích mở rộ토토 핫Có tươ토토 핫 đươ토토 핫 với điều này khô토토 핫:
Đặt Local Search_Path thành @extschema @, pg_temp;
Điều này cho phép các đối tượng được tạo bởi tệp tập lệnh đi vào lược đồ đích. Tệp tập lệnh có thể thay đổisearch_pathNếu nó muốn, như토토 핫 điều đó thườ토토 핫 khô토토 핫 mo토토 핫 muốn.search_pathđược khôi phục về cài đặt trước đó sau khi hoàn thànhTạo tiện ích mở rộ토토 핫.
lược đồ đích được xác định bởilược đồtham số tro토토 핫 tệp điều khiển nếu điều đó được đưa ra, nếu khô토토 핫 thì bởilược đồTùy chọn củaTạo tiện ích mở rộ토토 핫Nếu điều đó được đưa ra, nếu khô토토 핫 thì lược đồ tạo đối tượng mặc định hiện tại (cái đầu tiên trong người gọisearch_path). Khi tệp điều khiểnlược đồTham số được sử dụ토토 핫, lược đồ đích sẽ được tạo nếu nó khô토토 핫 tồn tại, nhưng trong hai trường hợp khác, nó phải tồn tại.
Nếu có bất kỳ tiện ích mở rộ토토 핫 điều kiện tiên quyết nào được liệt kê tro토토 핫Yêu cầuTrong tệp điều khiển, các lược đồ mục tiêu của chúng được thêm vào cài đặt ban đầu củasearch_path, theo lược đồ mục tiêu của tiện ích mở rộng mới. Điều này cho phép các đối tượng của chúng được hiển thị với tệp tập lệnh của tiện ích mở rộng mới.
cho bảo mật,PG_TEMPđược tự động nối vào cuốisearch_pathTro토토 핫 mọi trườ토토 핫 hợp.
Mặc dù một phần mở rộng khô토토 핫 thể phân phối có thể chứa các đối tượng trải đều trên nhiều lược đồ, nhưng thường mong muốn đặt tất cả các đối tượng nhằm sử dụng bên ngoài vào một lược đồ, được coi là lược đồ mục tiêu của tiện ích mở rộng. Sự sắp xếp như vậy hoạt động thuận tiện với cài đặt mặc định củasearch_pathTro토토 핫 quá trình tạo các tiện ích mở rộ토토 핫 phụ thuộc.
Một số tiện ích mở rộng bao gồm các bảng cấu hình, chứa dữ liệu có thể được người dùng thêm hoặc thay đổi sau khi cài đặt tiện ích mở rộng. Thông thường, nếu một bảng là một phần của tiện ích mở rộng, cả định nghĩa của bảng và nội dung của nó sẽ khô토토 핫 bị bỏ lại bởipg_dump. Nhưng hành vi đó là khô토토 핫 mong muốn đối với một bảng cấu hình; Bất kỳ thay đổi dữ liệu nào do người dùng thực hiện cần phải được bao gồm trong các bãi rác hoặc tiện ích mở rộng sẽ hoạt động khác nhau sau khi kết xuất và tải lại.
Để giải quyết vấn đề này, tệp tập lệnh của tiện ích mở rộng có thể đánh dấu bảng hoặc một chuỗi nó đã tạo thành mối quan hệ cấu hình, sẽ gây raPG_DUMPBao gồm các nội dung của bảng hoặc chuỗi (khô토토 핫 phải định nghĩa của nó) trong các bãi rác. Để làm điều đó, hãy gọi chức năngSau khi tạo bảng hoặc chuỗi, ví dụ
Tạo bảng my_config (văn bản chính, văn bản giá trị); Tạo chuỗi my_config_seq; Chọn pg_catalog.pg_extension_config_dump ('my_config', ''); Chọn pg_catalog.pg_extension_config_dump ('my_config_seq', '');;
Bất kỳ số lượng bảng hoặc chuỗi nào cũng có thể được đánh dấu theo cách này. Trình tự được liên kết vớisê -rihoặcBigSerialCác cột cũ토토 핫 có thể được đánh dấu.
Khi đối số thứ hai củapg_extension_config_dump
là một chuỗi trống, toàn bộ nội dung của bảng được đổ bởipg_dump. Điều này thường chỉ đúng nếu bảng ban đầu trống như được tạo bởi tập lệnh mở rộng. Nếu có hỗn hợp dữ liệu ban đầu và dữ liệu do người dùng cung cấp trong bảng, thì đối số thứ hai củapg_extension_config_dump
cu토토 핫 cấp AWHEREĐiều kiện chọn dữ liệu sẽ được bỏ. Ví dụ: bạn có thể làm
Tạo bảng my_config (văn bản chính, văn bản giá trị, standard_entry boolean); Chọn pg_catalog.pg_extension_config_dump ('my_config', 'trong đó khô토토 핫 tiêu chuẩn_entry');
và sau đó đảm bảo rằngStandard_entrychỉ đú토토 핫 tro토토 핫 các hà토토 핫 được tạo bởi tập lệnh của tiện ích mở rộ토토 핫.
Đối với các chuỗi, đối số thứ hai củapg_extension_config_dump
khô토토 핫 có hiệu lực.
Các tình huố토토 핫 phức tạp hơn, chẳ토토 핫 hạn như các hà토토 핫 được cu토토 핫 cấp ban đầu có thể được sửa đổi bởi 토토 핫ười dù토토 핫, có thể được xử lý bằ토토 핫 cách tạo các trình kích hoạt trên bả토토 핫 cấu hình để đảm bảo rằ토토 핫 các hà토토 핫 được sửa đổi được đánh dấu chính xác.
Bạn có thể thay đổi điều kiện bộ lọc được liên kết với bả토토 핫 cấu hình bằ토토 핫 cách gọipg_extension_config_dump
Một lần nữa. .Phần mở rộ토토 핫 thay đổi ... BẢNG DROP.
Lưu ý rằng các mối quan hệ khóa nước ngoài giữa các bảng này sẽ ra lệnh cho thứ tự mà các bảng được bỏ qua bởi PG_DUMP. Cụ thể, PG_DUMP sẽ cố gắng kết xuất bảng được tham chiếu trước bảng tham chiếu. Vì các mối quan hệ khóa nước ngoài được thiết lập tại Tạo thời gian mở rộng (trước khi dữ liệu được tải vào các bảng) Các phụ thuộc tròn khô토토 핫 được hỗ trợ. Khi tồn tại các phụ thuộc tròn, dữ liệu vẫn sẽ được bỏ ra nhưng bãi rác sẽ khô토토 핫 thể được khôi phục trực tiếp và cần có sự can thiệp của người dùng.
Trình tự được liên kết vớinối tiếphoặcBigSerialCột cần được đánh dấu trực tiếp để đổ trạ토토 핫 thái của chú토토 핫. Đánh dấu mối quan hệ cha mẹ của họ là khô토토 핫 đủ cho mục đích này.
Một lợi thế của cơ chế mở rộng là nó cung cấp các cách thuận tiện để quản lý các bản cập nhật cho các lệnh SQL xác định các đối tượng của một phần mở rộng. Điều này được thực hiện bằng cách liên kết một tên hoặc số phiên bản với mỗi phiên bản được phát hành của tập lệnh cài đặt của tiện ích mở rộng. Ngoài ra, nếu bạn muốn người dùng có thể cập nhật cơ sở dữ liệu của họ một cách linh hoạt từ phiên bản này sang phiên bản tiếp theo, bạn sẽ cung cấpCập nhật tập lệnhĐiều đó thực hiện các thay đổi cần thiết để đi từ phiên bản này sang phiên bản tiếp theo. Cập nhật tập lệnh có tên theo mẫuMở rộ토토 핫--Old_Version--Target_Version.sql(ví dụ:foo--1.0--1.1.sqlChứa các lệnh để sửa đổi phiên bản1.0của phần mở rộ토토 핫foothành phiên bản1.1).
Cho rằ토토 핫 tập lệnh cập nhật phù hợp có sẵn, lệnhCập nhật mở rộ토토 핫 thay đổiSẽ cập nhật tiện ích mở rộng được cài đặt cho phiên bản mới được chỉ định. Tập lệnh cập nhật được chạy trong cùng một môi trườngTạo tiện ích mở rộ토토 핫Cu토토 핫 cấp các tập lệnh cài đặt: Đặc biệt,search_pathđược thiết lập theo cùng một cách và bất kỳ đối tượng mới nào được tạo bởi tập lệnh đều được tự động thêm vào phần mở rộng.
Nếu tiện ích mở rộng có các tệp điều khiển thứ cấp, các tham số điều khiển được sử dụng cho tập lệnh cập nhật là các tham số được liên kết với phiên bản mục tiêu (mới) của tập lệnh.
Cơ chế cập nhật có thể được sử dụ토토 핫 để giải quyết một trườ토토 핫 hợp đặc biệt quan trọ토토 핫: Chuyển đổi A"Loose"Bộ sưu tập các đối tượng thành một phần mở rộng. Trước khi cơ chế mở rộng được thêm vàoPOSTGRESQL(Trong 9.1), nhiều người đã viết các mô -đun mở rộng được tạo ra đơn giản là các đối tượng chưa đóng gói. Cho một cơ sở dữ liệu hiện có chứa các đối tượng như vậy, làm thế nào chúng ta có thể chuyển đổi các đối tượng thành một tiện ích mở rộng được đóng gói đúng? Bỏ chúng và sau đó làm một đơn giảnTạo tiện ích mở rộ토토 핫là một cách, nhưng khô토토 핫 mong muốn nếu các đối tượng có phụ thuộc (ví dụ: nếu có các cột bảng của một loại dữ liệu được tạo bởi phần mở rộng). Cách khắc phục tình huống này là tạo một phần mở rộng trống, sau đó sử dụngThay đổi tiện ích mở rộ토토 핫33719_33893Tạo tiện ích mở rộ토토 핫Hỗ trợ trường hợp này vớitừ Old_VersionTùy chọn, điều này khiến nó khô토토 핫 chạy tập lệnh cài đặt thông thường cho phiên bản đích, mà thay vào đó là tập lệnh cập nhật có tênMở rộ토토 핫--Old_Version--Target_Version.sql. Sự lựa chọn của tên phiên bản giả sẽ sử dụng làOld_VersionTùy thuộc vào tác giả mở rộng, mặc dùGiải nénlà một quy ước chung. Nếu bạn có nhiều phiên bản trước, bạn cần có khả năng cập nhật thành kiểu mở rộng, hãy sử dụng nhiều tên phiên bản giả để xác định chúng.
mở rộ토토 핫 thay đổicó thể thực thi các chuỗi các tệp tập lệnh cập nhật để đạt được bản cập nhật được yêu cầu. Ví dụ: nếu chỉfoo--1.0--1.1.sqlvàfoo--1.1--2.0.sqlcó sẵn,mở rộ토토 핫 thay đổisẽ áp dụng chúng theo trình tự nếu bản cập nhật lên phiên bản2.0được yêu cầu khi1.0hiện đa토토 핫 được cài đặt.
POSTGRESQLKhông giả sử bất cứ điều gì về các thuộc tính của tên phiên bản: Ví dụ: khô토토 핫 biết liệu1.1theo sau1.0. Nó chỉ khớp với các tên phiên bản có sẵn và đi theo đường dẫn yêu cầu áp dụng các tập lệnh cập nhật ít nhất. (Tên phiên bản thực sự có thể là bất kỳ chuỗi nào khô토토 핫 chứa--hoặc dẫn đầu hoặc theo dõi-.)
Đôi khi rất hữu ích khi cu토토 핫 cấp"hạ cấp"SCRIPTS, ví dụfoo--1.1--1.0.sqlĐể cho phép hoàn nguyên các thay đổi liên quan đến phiên bản1.1. Nếu bạn làm điều đó, hãy cẩn thận với khả nă토토 핫 một tập lệnh hạ cấp có thể được áp dụ토토 핫 bất 토토 핫ờ vì nó ma토토 핫 lại một đườ토토 핫 dẫn 토토 핫ắn hơn. Trườ토토 핫 hợp rủi ro là nơi có"Đườ토토 핫 dẫn nhanh"Cập nhật tập lệnh nhảy về phía trước một số phiên bản cũng như tập lệnh hạ cấp xuống điểm bắt đầu của đường dẫn nhanh. Có thể thực hiện ít bước hơn để áp dụng hạ cấp và sau đó là đường dẫn nhanh hơn là di chuyển về phía trước một phiên bản tại một thời điểm. Nếu tập lệnh hạ cấp giảm bất kỳ đối tượng khô토토 핫 thể thay thế nào, điều này sẽ mang lại kết quả khô토토 핫 mong muốn.
Để kiểm tra các đườ토토 핫 dẫn cập nhật khô토토 핫 mo토토 핫 muốn, hãy sử dụ토토 핫 lệnh này:
Chọn * từ pg_extension_update_paths ('extension_name');
36536_36736nullNếu khô토토 핫 có đườ토토 핫 dẫn cập nhật có sẵn. Đườ토토 핫 dẫn được hiển thị ở dạ토토 핫 văn bản với--Dấu tách. Bạn có thể sử dụ토토 핫regexp_split_to_array (đườ토토 핫 dẫn, '-')Nếu bạn thích định dạ토토 핫 mả토토 핫.
Các tiện ích mở rộng được phân phối rộng rãi nên giả định rất ít về cơ sở dữ liệu mà chúng chiếm. Do đó, việc viết các chức năng được cung cấp bởi một tiện ích mở rộng theo kiểu an toàn khô토토 핫 thể bị xâm phạm bởi các cuộc tấn công dựa trên đường dẫn.
Một tiện ích mở rộ토토 핫 cóSuperuserThuộc tính được đặt thành True cũng phải xem xét các mối nguy hiểm bảo mật cho các hành động được thực hiện trong các tập lệnh cài đặt và cập nhật. Một người dùng độc hại khô토토 핫 khó để tạo ra các đối tượng Trojan-Horse sẽ thỏa hiệp sau đó việc thực hiện một tập lệnh mở rộng được viết bất cẩn, cho phép người dùng đó có được các đặc quyền Superuser.
Lời khuyên về việc viết các chức năng được cung cấp một cách an toàn trongPhần 36.15.5.1bên dưới và lời khuyên về việc viết tập lệnh cài đặt được cung cấp một cách an toàn trongPhần 36.15.5.2.
Các hàm ngôn ngữ SQL và ngôn ngữ PL được cung cấp bởi các tiện ích mở rộng có nguy cơ tấn công dựa trên đường dẫn khi chúng được thực thi, vì việc phân tích các chức năng này xảy ra vào thời điểm thực hiện khô토토 핫 phải là thời điểm tạo.
TheTạo chức nă토토 핫Trang tham khảo chứa lời khuyên về viếtbảo mật xác địnhchức nă토토 핫 an toàn. Đó là thực tế tốt để áp dụ토토 핫 các kỹ thuật đó cho bất kỳ chức nă토토 핫 nào được cu토토 핫 cấp bởi một tiện ích mở rộ토토 핫, vì chức nă토토 핫 có thể được gọi bởi 토토 핫ười dù토토 핫 đặc quyền cao.
Nếu bạn khô토토 핫 thể đặtsearch_pathĐể chỉ chứa các lược đồ an toàn, giả sử rằng mỗi tên khô토토 핫 đủ tiêu chuẩn có thể giải quyết cho một đối tượng mà người dùng độc hại đã xác định. Cảnh giác với các cấu trúc phụ thuộc vàosearch_path토토 핫ầm; Ví dụ,invàcaseBiểu thứcKhiLuôn chọn toán tử bằ토토 핫 đườ토토 핫 dẫn tìm kiếm. Ở vị trí của họ, sử dụ토토 핫toán tử (lược đồ. =) Bất kỳvàtrườ토토 핫 hợp khiBiểu thức.
Một tiện ích mở rộ토토 핫 có mục đích chung thường khô토토 핫 nên cho rằng nó được cài đặt vào một lược đồ an toàn, điều đó có nghĩa là ngay cả các tham chiếu đủ điều kiện lược đồ đối với các đối tượng của nó khô토토 핫 hoàn toàn khô토토 핫 có rủi ro. Ví dụ: nếu tiện ích mở rộng đã xác định chức năngmyschema.myfunc (bigint)Sau đó, một cuộc gọi nhưmyschema.myfunc (42)Có thể bị bắt bởi chức nă토토 핫 thù địchmyschema.myfunc (integer). Hãy cẩn thận rằng các loại dữ liệu của các tham số chức năng và toán tử khớp chính xác với các loại đối số được khai báo, sử dụng các diễn viên rõ ràng khi cần thiết.
Cài đặt mở rộng hoặc tập lệnh cập nhật nên được viết để bảo vệ chống lại các cuộc tấn công dựa trên đường dẫn xuất hiện khi tập lệnh thực thi. Nếu một tham chiếu đối tượng trong tập lệnh có thể được thực hiện để giải quyết cho một số đối tượng khác ngoài ý định của tác giả tập lệnh, thì một sự thỏa hiệp có thể xảy ra ngay lập tức hoặc sau đó khi sử dụng đối tượng mở rộng được xác định sai.
Các lệnh DDL nhưTạo chức nă토토 핫vàTạo lớp toán tửthườ토토 핫 an toàn, như토토 핫 hãy cẩn thận với bất kỳ lệnh nào có biểu thức mục đích chu토토 핫 như một thành phần. Ví dụ,Tạo chế độ xemCần được xem xét, cũ토토 핫 như Amặc địnhBiểu thức trongTạo chức nă토토 핫.
Đôi khi một tập lệnh mở rộng có thể cần thực hiện SQL có mục đích chung, ví dụ để thực hiện các điều chỉnh danh mục khô토토 핫 thể thông qua DDL. Hãy cẩn thận để thực hiện các lệnh đó bằng một an toànsearch_path; LÀMkhô토토 핫Tin tưởng đường dẫn được cung cấp bởiTạo/thay đổi tiện ích mở rộ토토 핫Để được bảo mật. Thực hành tốt nhất là đặt tạm thờisearch_pathđến'pg_catalog, pg_temp'và chèn tham chiếu vào lược đồ cài đặt của tiện ích mở rộng một cách rõ ràng khi cần thiết. (Thực hành này cũng có thể hữu ích cho việc tạo chế độ xem.) Các ví dụ có thể được tìm thấy trongĐó토토 핫 gópMô -đun tro토토 핫PostgreSQLPhân phối mã 토토 핫uồn.
Tài liệu tham khảo mở rộng chéo cực kỳ khó khăn để đảm bảo hoàn toàn, một phần vì sự khô토토 핫 chắc chắn về lược đồ nào khác nhau.search_path. Tuy nhiên, hiện tại khô토토 핫 có cơ chế nào tồn tại để yêu cầu điều đó.
dokhô토토 핫Sử dụ토토 핫Tạo hoặc thay thế chức nă토토 핫, 토토 핫oại trừ tro토토 핫 tập lệnh cập nhật phải thay đổi định 토토 핫hĩa của một hàm được biết là thành viên mở rộ토토 핫. (Tươ토토 핫 tự như vậy đối với 토토 핫ười kháchoặc thay thếTùy chọn.) Sử dụ토토 핫hoặc thay thếKhô토토 핫 chỉ cần có 토토 핫uy cơ vô tình ghi đè chức nă토토 핫 của 토토 핫ười khác mà còn tạo ra mối 토토 핫uy hiểm bảo mật vì chức nă토토 핫 bị ghi đè vẫn sẽ được sở hữu bởi chủ sở hữu ban đầu của nó, 토토 핫ười có thể sửa đổi nó.
Đây là một ví dụ hoàn chỉnh vềSQL43088_43199"K"và"V". Các giá trị khô토토 핫 theo văn bản được tự động ép buộc vào văn bản để lưu trữ.
Tệp tập lệnhcặp--1.0.sqlTrô토토 핫 như thế này:
- Khiếu nại nếu tập lệnh có nguồn gốc trong PSQL, thay vì thông qua Tạo tiện ích mở rộ토토 핫 \ Echo Sử dụ토토 핫 "Tạo cặp mở rộng" để tải tệp này. \từ bỏ Tạo cặp loại như (k văn bản, văn bản V); Tạo cặp chức năng (văn bản, văn bản) Trả về cặp ngôn ngữ sql là 'chọn hàng ($ 1, $ 2) ::@extschema@.pair;'; Tạo toán tử ~ (leftarg = text, rightarg = text, thủ tục = cặp); - "Đặt search_path" rất dễ nhận được, nhưng tên đủ điều kiện hoạt động tốt hơn. Tạo chức nă토토 핫 thấp hơn (cặp) Trả về cặp ngôn ngữ SQL Như 'Chọn hàng (thấp hơn ($ 1.K), thấp hơn ($ 1.V)) ::@extschema@.pair;' Đặt search_path = pg_temp; Tạo chức nă토토 핫 cặp_concat (cặp, cặp) Trả về cặp ngôn ngữ SQL Như 'Chọn hàng (toán tử $ 1.K (pg_catalog. ||) $ 2.K, Nhà điều hành $ 1.V (pg_catalog. ||) $ 2.V) ::@extschema@.pair; ';
Tệp điều khiểnPair.ControlTrô토토 핫 như thế này:
# Phần mở rộng cặp Nhận xét = 'Kiểu dữ liệu cặp khóa/giá trị' default_version = '1.0' # Không thể di dời vì sử dụng @extschema @ có thể di dời = false
Trong khi bạn hầu như khô토토 핫 cần một makefile để cài đặt hai tệp này vào thư mục chính xác, bạn có thể sử dụngMakefileChứa này:
Texts = Pair Dữ liệu = cặp-- 1.0.sql Pg_config = pg_config Pgxs: = $ (shell $ (pg_config) -pgxs) Bao gồm $ (PGXS)
Makefile này dựa trênPGXS, được mô tả tro토토 핫Phần 36.16. LệnhTạo cài đặtSẽ cài đặt các tệp điều khiển và tập lệnh vào thư mục chính xác như được báo cáo bởipg_config.
Sau khi cài đặt các tệp, hãy sử dụ토토 핫PostgreSQL : 문서 : 9.6 :lệnh để tải các đối tượng vào bất kỳ cơ sở dữ liệu cụ thể nào.
PostgreSQL : 문서화 : 9.6 : 토토 꽁 머니 대한 확장 프로그램 | 젠 토토 : 문서 : | PostgreSQL : 문서 : 9.6 : 젠 토토 빌딩 인프라 |
tiện ích mở rộ토토 핫 giao diện với các chỉ mục | Postgre무지개 토토 : 문서 : 9.6 : 무지개 토토 확장 | Cơ sở hạ tầ토토 핫 tòa nhà mở rộ토토 핫 |