Một tiện ích kèo bóng đá c1 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 kèo bóng đá c1 chức năng mới, toán tử mới và kèo bóng đá c1 lớp toán tử chỉ mục mới. Rất hữu ích khi thu thập tất cả kèo bóng đá c1 đố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 kèo bóng đá c1 gói như vậyTiện ích kèo bóng đá c1. Để xác định tiện ích kèo bóng đá c1, bạn cần ít nhất mộtTập tin tập lệnhchứaSQLCác lệnh để tạo các đối tượng của tiện ích kèo bóng đá c1 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 kèo bóng đá c1. Nếu tiện ích kèo bóng đá c1 bao gồm mã C, thông thường cũng sẽ có một tệp thư viện được chia sẻ mà mã C đã được xây dựng. Khi bạn có các tệp này, đơn giảnTạo tiện ích kèo bóng đá c1Lệnh tải kèo bóng đá c1 đối tượng vào cơ sở dữ liệu của bạn.
Ưu điểm chính của việc sử dụng tiện ích kèo bóng đá c1, thay vì chỉ chạySQLtập lệnh để tải kèo bóng đá c1 loạtLooseHồiĐối kèo bóng đá c1 vào cơ sở dữ liệu của bạn, đó làPostgreSQLSau đó sẽ hiểu rằng các đối tượng của phần kèo bóng đá c1 đi cùng nhau. Bạn có thể bỏ tất cả các đối tượng bằng mộtTiện ích kèo bóng đá c1lệnh (không cần duy trì riêngMạnhGỡ cài đặtxôngtập lệnh). Thậm chí hữu ích hơn,pg_dumpbiết rằng nó không nên đổ các đối tượng thành viên riêng lẻ của phần kèo bóng đá c1 - nó sẽ chỉ bao gồm mộtTạo tiện ích kèo bóng đá c1
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 kèo bóng đá c1 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ông cho phép bạn bỏ một đối tượng riêng lẻ có trong một phần kèo bóng đá c1, ngoại trừ bằng cách bỏ toàn bộ phần kèo bóng đá c1. Ngoài ra, trong khi bạn có thể thay đổi định nghĩa của một đối tượng thành viên kèo bóng đá c1 (ví dụ: thông quaTạo hoặc thay thế chức năng
Đối với kèo bóng đá c1 hàm), hãy nhớ rằng định nghĩa sửa đổi sẽ không 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 kèo bóng đá c1. (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; xemkèo bóng đá c1 37.17.3.) Trong các tình huống sản xuất, nói chung tốt hơn là tạo tập lệnh cập nhật kèo bóng đá c1 để thực hiện các thay đổi đối với các đối tượng thành viên kèo bóng đá c1.
Tập lệnh kèo bóng đá c1 có thể đặt các đặc quyền trên các đối tượng là một phần của phần kèo bóng đá c1, sử dụngGrant
vàthu hồi
13900_13998pg_init_privs
Danh mục hệ thống. Khipg_dumpđược sử dụng,Tạo tiện ích kèo bóng đá c1
Lệnh sẽ được bao gồm trong bãi rác, theo sau là tập hợpGrant
vàthu hồi
14386_14496
PostgreSQLHiện không hỗ trợ các tập lệnh kèo bóng đá c1Tạo chính sách
hoặcNhãn bảo mật
Câu lệnh. Chúng được dự kiến sẽ được đặt sau khi tiện ích kèo bóng đá c1 đã đượ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 kèo bóng đá c1 sẽ được bao gồm trong các bãi rác được tạo bởipg_dump.
Cơ chế kèo bóng đá c1 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 kèo bóng đá c1. Ví dụ: nếu phiên bản 1.1 của phần kèo bóng đá c1 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ả kèo bóng đá c1 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 kèo bóng đá c1 thay đổi
Lệ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 kèo bóng đá c1 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 kèo bóng đá c1 được hiển thị trong mô tả củaPostgreSQL: Tài kèo. Đá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ông gian bảng, không thể là thành viên kèo bóng đá c1 vì một tiện ích kèo bóng đá c1 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 kèo bóng đá c1, nhưng không phải là ngược lại: một phần kèo bóng đá c1 như vậy có tên không đủ tiêu chuẩn và không tồn tạitrongHồibất kỳ lược đồ nào. Tuy nhiên, các đối tượng thành viên của tiện ích kèo bóng đá c1 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ông phù hợp cho một phần kèo bóng đá c1 để sở hữu (các) đối tượng thành viên của nó ở bên trong.
Nếu tập lệnh của một tiện ích kèo bóng đá c1 sẽ tạo bất kỳ đối tượng tạm thời nào (như bảng TEMP), các đối tượng đó được coi là thành viên kèo bóng đá c1 trong phần còn lại của phiên hiện tại, nhưng được tự động bỏ ở cuối phiên, như bất kỳ đối tượng tạm thời nào. Đây là một ngoại lệ đối với quy tắc mà các đối tượng thành viên kèo bóng đá c1 không thể bị loại bỏ mà không bỏ toàn bộ tiện ích kèo bóng đá c1.
TheTạo tiện ích kèo bóng đá c1Lệnh dựa trên tệp điều khiển cho mỗi phần kèo bóng đá c1, phải được đặt tên giống như phần kèo bóng đá c1 với hậu tố.Control
, và phải được đặt trong cài đặtchia sẻ/kèo bóng đá c1
Thư mục. Cũng phải có ít nhất kèo bóng đá c1SQLTập tin tập lệnh, theo mẫu đặt tên
(ví dụ:kèo bóng đá c1
--phiên bản
.sqlfoo--1.0.sql
cho phiên bản1.0
của phần kèo bóng đá c1foo
). Theo mặc định, (kèo bóng đá c1) tệp tập lệnh cũng được đặt trongchia sẻ/kèo bóng đá c1
18173_18265
Định dạng tệp cho tệp điều khiển kèo bóng đá c1 giống như đối vớiPostgreSql.conf
Tệp, cụ thể là danh sáchtham số_name
=
giá trị
Bài tập, một trên mỗi dòng. kèo bóng đá c1 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ông phải là kèo bóng đá c1 từ hoặc số.
Tệp điều khiển có thể đặt kèo bóng đá c1 tham số sau:
Thư mục
(chuỗi
)Thư mục chứa tiện ích kèo bóng đá c1SQLTập tin tập lệnh. Trừ khi kèo bóng đá c1 đường dẫn tuyệt đối được đưa ra, tên liên quan đến cài đặtSharedir
Thư mục. Hành vi mặc định tương đương với chỉ địnhThư mục = 'kèo bóng đá c1'
.
default_version
(chuỗi
)Phiên bản mặc định của tiện ích kèo bóng đá c1 (phiên bản sẽ được cài đặt nếu không có phiên bản nào được chỉ định trongTạo tiện ích kèo bóng đá c1
). Mặc dù điều này có thể được bỏ qua, điều đó sẽ dẫn đếnTạo tiện ích kèo bóng đá c1
thất bại nếu khôngphiên bản
Tùy chọn xuất hiện, vì vậy bạn thường không muốn làm điều đó.
bình luận
(chuỗi
)Một bình luận (bất kỳ chuỗi nào) về phần kèo bóng đá c1. Nhận xét được áp dụng khi ban đầu tạo một tiện ích kèo bóng đá c1, nhưng không phải trong các bản cập nhật kèo bóng đá c1 (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 kèo bóng đá c1 có thể được đặt bằng cách viết mộtbình luậnLệnh trong tệp tập lệnh.
mã hóa
(chuỗi
)Mã hóa bộ ký tự được sử dụng bởi (kèo bóng đá c1) tệp tập lệnh. Điều này sẽ được chỉ định nếu kèo bóng đá c1 tệp tập lệnh chứa bất kỳ ký tự không ASCII nào. Nếu không, kèo bóng đá c1 tệp sẽ được giả định là trong mã hóa cơ sở dữ liệu.
module_pathname
(chuỗi
)Giá trị của tham số này sẽ được thay thế cho mỗi lần xuất hiệnmodule_pathname
Trong (kèo bóng đá c1) tệp tập lệnh. Nếu nó không được thiết lập, không có sự thay thế nào được thực hiện. Thông thường, điều này được đặt thành$ libdir/
và sau đóshared_l Library_name
module_pathname
được sử dụng trongTạo chức năng
kèo bóng đá c1 lệnh cho kèo bóng đá c1 hàm ngôn ngữ C, để kèo bóng đá c1 tệp tập lệnh không cần phải kết nối tên của thư viện được chia sẻ.
Yêu cầu
(chuỗi
)Một danh sách tên của các tiện ích kèo bóng đá c1 mà phần kèo bóng đá c1 này phụ thuộc vào, ví dụYêu cầu = 'Foo, Bar'
. Các tiện ích kèo bóng đá c1 đó phải được cài đặt trước khi có thể cài đặt cái này.
Superuser
(Boolean
)Nếu tham số này làTRUE
22009_22121Trusted
, bên dưới). Nếu nó được đặt thànhSai
, Chỉ cần kèo bóng đá c1 đặc quyền cần thiết để thực thi kèo bóng đá c1 lệnh trong tập lệnh cài đặt hoặc cập nhật. Điều này thường được đặt thànhTRUE
Nếu bất kỳ lệnh script nào yêu cầu kèo bóng đá c1 đặc quyền siêu âm. .
Trusted
(Boolean
)Tham số này, nếu được đặt thànhTRUE
(không phải là mặc định), cho phép một số người không siêu giám sát cài đặt tiện ích kèo bóng đá c1 cóSuperuser
Đặt thànhTRUE
. Cụ thể, cài đặt sẽ được phép cho bất kỳ ai cóTạo
Đặc quyền trên cơ sở dữ liệu hiện tại. Khi người dùng thực thiTạo tiện ích kèo bóng đá c1
không phải là kèo bóng đá c1 siêu người dùng mà được phép cài đặt theo tham số này, sau đó tập lệnh cài đặt hoặc cập nhật được chạy dưới dạng Superuser Bootstrap, không phải là người dùng gọi. Tham số này không liên quan nếuSuperuser
làSai
23412_23703kèo bóng đá c1 37.17.6.
Relocatable
(Boolean
)Một tiện ích kèo bóng đá c1 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 ban đầu của phần kèo bóng đá c1. Mặc định làSai
, tức là, tiện ích kèo bóng đá c1 không thể định nghĩa lại. Nhìn thấykèo bóng đá c1 37.17.2Để biết thêm thông tin.
lược đồ
(chuỗi
)24615_24770lược đồ
Tham số chỉ được tư vấn khi ban đầu tạo một phần kèo bóng đá c1, không phải trong các bản cập nhật kèo bóng đá c1. Nhìn thấykèo bóng đá c1 37.17.2Để biết thêm thông tin.
Ngoài tệp điều khiển chính
, một tiện ích kèo bóng đá c1 có thể có các tệp điều khiển thứ cấp có tên trong kiểukèo bóng đá c1
.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 kèo bóng đá c1 đó. Tuy nhiên, các tham sốkèo bóng đá c1
--phiên bản
.controlThư mục
vàDefault_version
Không thể được đặt trong tệp điều khiển phụ.
Một tiện ích kèo bóng đá c1SQLTập tin tập lệnh có thể chứa bất kỳ lệnh SQL nào, ngoại trừ kèo bóng đá c1 lệnh điều khiển giao dịch (bắt đầu
, cam kết
, v.v.) và kèo bóng đá c1 lệnh không thể được thực thi bên trong một khối giao dịch (chẳng hạn nhưVACUUM
26231_26320
Một tiện ích kèo bóng đá c1SQLTập tin tập lệnh cũng có thể chứa kèo bóng đá c1 dòng bắt đầu bằng\ echo
, sẽ bị bỏ qua (được coi là bình luận) bằng cơ chế kèo bóng đá c1. Đ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 kèo bóng đá c1
(Xem ví dụ tập lệnh trongkèo bóng đá c1 37.17.7). Không có điều đó, người dùng có thể vô tình tải nội dung của tiện ích kèo bóng đá c1 làHồiLooseKhănĐối tượng chứ không phải là một phần kèo bóng đá c1, một trạng thái có một chút tẻ nhạt để phục hồi từ.
Nếu tập lệnh kèo bóng đá c1 chứa chuỗi@extowner@
, Chuỗi đó được thay thế bằng tên (được trích dẫn phù hợp) của người dùng gọiTạo tiện ích kèo bóng đá c1
hoặckèo bóng đá c1 thay đổi
. Thông thường, tính năng này được sử dụng bởi các tiện ích kèo bóng đá c1 được đánh dấu đáng tin cậy để gán quyền sở hữu các đối tượng được chọn cho người dùng gọi thay vì Superuser Bootstrap. .
Trong khi kèo bóng đá c1 tệp tập lệnh có thể chứa bất kỳ ký tự nào được cho phép bởi mã hóa được chỉ định, kèo bóng đá c1 tệp điều khiển chỉ chứa ASCII đơn giản, vì không có cách nào đểPostgreSQLĐể 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ông phải ASCII trong nhận xét của tiện ích kèo bóng đá c1. Thực hành được đề xuất trong trường hợp đó là không sử dụng tệp điều khiểnbình luận
tham số, nhưng thay vào đó sử dụngNhận xét về tiện ích kèo bóng đá c1
Trong tệp tập lệnh để đặt nhận xét.
28562_28743
Một tiện ích kèo bóng đá c1 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ộ kèo bóng đá c1
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 kèo bóng đá c1 không 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 kèo bóng đá c1 phải nằm trong một lược đồ để bắt đầu (bỏ qua các đối tượng không 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 kèo bóng đá c1 hoàn toàn có thể di dời bằng cách cài đặtRelocatable = true
Trong tệp điều khiển của nó.
Một tiện ích kèo bóng đá c1 có thể được chuyển vị trong quá trình cài đặt nhưng không phải sau đó. Đây thường là trường hợp nếu tệp tập lệnh của tiện ích kèo bóng đá c1 cần tham khảo lược đồ đích một cách rõ ràng, ví dụ trong cài đặtsearch_path
Thuộc tính cho các hàm SQL. Đối với một tiện ích kèo bóng đá c1 như vậy, đặtRelocatable = false
Trong 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ả kèo bóng đá c1 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ọn củaTạo tiện ích kèo bóng đá c1
.
Nếu tiện ích kèo bóng đá c1 hoàn toàn không hỗ trợ di dời, SETRelocatable = false
Trong 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ọn củaTạo tiện ích kèo bóng đá c1
, 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 kèo bóng đá c1 chứa các giả định nội bộ về các tên lược đồ không 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.
Trong mọi trường hợp, tệp tập lệnh sẽ được thực thi bằngsearch_pathBan đầu được đặt để trỏ đến lược đồ đích; đó là,Tạo tiện ích kèo bóng đá c1
Có tương đương với điều này không:
Đặt tìm kiếm cục bộ_path thành @extschema @, pg_temp;
31579_31689search_path
Nếu nó muốn, nhưng điều đó thường không mong 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 kèo bóng đá c1
.
lược đồ đích được xác định bởilược đồ
tham số trong tệp điều khiển nếu điều đó được đưa ra, nếu không thì bởilược đồ
Tùy chọnTạo tiện ích kèo bóng đá c1
Nếu điều đó được đưa ra, nếu không thì lược đồ tạo đối kèo bóng đá c1 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ụng, lược đồ đích sẽ được tạo nếu nó không tồn tại, nhưng trong hai trường hợp còn lại, nó phải tồn tại.
Nếu có bất kỳ tiện ích kèo bóng đá c1 điều kiện tiên quyết nào được liệt kê trongYêu cầu
Trong tệp điều khiển, kèo bóng đá c1 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 kèo bóng đá c1 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 kèo bóng đá c1 mới.
cho bảo mật,PG_TEMP
được tự động nối vào cuốisearch_path
Trong mọi trường hợp.
33001_33304search_path
Trong khi tạo ra các tiện ích kèo bóng đá c1 phụ thuộc.
Một số tiện ích kèo bóng đá c1 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 kèo bóng đá c1. Thông thường, nếu một bảng là một phần của tiện ích kèo bóng đá c1, cả định nghĩa của bảng và nội dung của nó sẽ không bị bỏ lại bởipg_dump. Nhưng hành vi đó là không 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 được đưa vào các bãi rác hoặc tiện ích kèo bóng đá c1 sẽ hoạt động khác nhau sau khi kết xuất và khôi phục.
Để giải quyết vấn đề này, tệp tập lệnh của tiện ích kèo bóng đá c1 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_dumpĐể bao gồm kèo bóng đá c1 nội dung của bảng hoặc chuỗi (không phải định nghĩa của nó) trong kèo bóng đá c1 bãi rác. Để làm điều đó, hãy gọi chức năngSau khi tạo bảng hoặc trình tự, 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ê -ri
hoặcBigSerial
kèo bóng đá c1 cột cũng có thể được đánh dấu.
Khi đối số thứ hai củapg_extension_config_dump
là kèo bóng đá c1 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 kèo bóng đá c1. 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
Cung cấpWHERE
Đ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ông tiêu chuẩn_entry');
và sau đó đảm bảo rằngStandard_entry
chỉ đúng trong các hàng được tạo bởi tập lệnh của tiện ích kèo bóng đá c1.
Đối với kèo bóng đá c1 chuỗi, đối số thứ hai củapg_extension_config_dump
không có hiệu lực.
kèo bóng đá c1 tình huống phức tạp hơn, chẳng hạn như kèo bóng đá c1 hàng được cung cấp ban đầu có thể được sửa đổi bởi người dùng, có thể được xử lý bằng cách tạo kèo bóng đá c1 trình kích hoạt trên bảng cấu hình để đảm bảo rằng kèo bóng đá c1 hàng đượ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ảng cấu hình bằng cách gọipg_extension_config_dump
kèo bóng đá c1 lần nữa. .36669_36701
.
36719_37261
Trình tự được liên kết vớisê -ri
hoặcBigSerial
Cột cần được đánh dấu trực tiếp để đổ trạng thái của chúng. Đánh dấu mối quan hệ cha mẹ của họ là không đủ cho mục đích này.
37707_38109Cập nhật tập lệnhĐiều đó thực hiện kèo bóng đá c1 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ẫu
(ví dụ:kèo bóng đá c1
--Old_Version
--Target_Version
.sqlfoo--1.0--1.1.sql
Chứa kèo bóng đá c1 lệnh để sửa đổi phiên bản1.0
của phần kèo bóng đá c1foo
thành phiên bản1.1
).
Cho rằng tập lệnh cập nhật phù hợp có sẵn, lệnh38786_38810
Sẽ cập nhật tiện ích kèo bóng đá c1 đượ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 kèo bóng đá c1
38980_39033search_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 kèo bóng đá c1. Ngoài ra, nếu tập lệnh chọn bỏ các đối tượng thành viên kèo bóng đá c1, chúng sẽ tự động phân tách khỏi phần kèo bóng đá c1.
Nếu tiện ích kèo bóng đá c1 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.
kèo bóng đá c1 thay đổi
39530_39637foo--1.0--1.1.sql
vàfoo--1.1--2.0.sql
Có sẵn,kèo bóng đá c1 thay đổi
sẽ á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.0
hiện đang được cài đặt.
POSTGRESQLKhông giả sử bất cứ điều gì về kèo bóng đá c1 thuộc tính của tên phiên bản: Ví dụ: nó không biết liệu1.1
theo sau1.0
. Nó chỉ khớp với kèo bóng đá c1 tên phiên bản có sẵn và đi theo đường dẫn yêu cầu áp dụng kèo bóng đá c1 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ông chứa--
hoặc dẫn đầu hoặc theo dõi-
.)
Đôi khi rất hữu ích khi cung cấpMạnhhạ cấpHồiSCRIPTS, ví dụfoo--1.1--1.0.sql
Để cho phép hoàn nguyên kèo bóng đá c1 thay đổi liên quan đến phiên bản1.1
40720_40894MạnhĐường dẫn nhanhHồiCập nhật tập lệnh nhảy trước kèo bóng đá c1 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 kèo bóng đá c1 phiên bản tại kèo bóng đá c1 thời điểm. Nếu tập lệnh hạ cấp giảm bất kỳ đối tượng không thể thay thế nào, điều này sẽ mang lại kết quả không mong muốn.
Để kiểm tra kèo bóng đá c1 đường dẫn cập nhật không mong muốn, hãy sử dụng lệnh này:
Chọn * từ pg_extension_update_paths ('extension_name
');
41495_41695null
Nếu không có đường dẫn cập nhật có sẵn. Đường dẫn được hiển thị ở dạng văn bản với--
Dấu tách. Bạn có thể sử dụng41882_41916
Nếu bạn thích định dạng mảng.
42198_42378foo
Phần kèo bóng đá c1 trong các phiên bản1.0
, 1.1
và1.2
, Cần có kèo bóng đá c1 tập lệnh cập nhậtfoo--1.0--1.1.sql
vàfoo--1.1--1.2.sql
. TrướcPostgreSQL10, cũng cần phải tạo kèo bóng đá c1 tệp tập lệnh mớifoo--1.1.sql
vàfoo--1.2.sql
42862_429941.0
và sau đó cập nhật. Đó là tẻ nhạt và trùng lặp, nhưng bây giờ nó không cần thiết, bởi vìTạo tiện ích kèo bóng đá c1
Có thể tự động theo chuỗi cập nhật. Ví dụ: nếu chỉ kèo bóng đá c1 tệp tập lệnhfoo--1.0.sql
, foo--1.0--1.1.sql
vàfoo--1.1--1.2.sql
Có sẵn sau đó yêu cầu cài đặt phiên bản1.2
được vinh danh bằng cách chạy ba tập lệnh đó theo trình tự. Việc xử lý giống như khi bạn đã cài đặt lần đầu tiên1.0
và sau đó được cập nhật lên1.2
. (Như vớiCập nhật kèo bóng đá c1 thay đổi
, Nếu có sẵn nhiều con đường thì ngắn nhất được ưu tiên.) Sắp xếp các tệp tập lệnh của một tiện ích kèo bóng đá c1 theo kiểu này có thể làm giảm lượng nỗ lực bảo trì cần thiết để tạo ra các bản cập nhật nhỏ.
Nếu bạn sử dụng các tệp điều khiển thứ cấp (cụ thể phiên bản) với tiện ích kèo bóng đá c1 được duy trì theo kiểu này, hãy nhớ rằng mỗi phiên bản cần một tệp điều khiển ngay cả khi nó không có tập lệnh cài đặt độc lập, vì tệp điều khiển đó sẽ xác định cách thức cập nhật ngầm vào phiên bản đó. Ví dụ: nếu44259_44277
Chỉ địnhYêu cầu = 'Bar'
nhưngfoo
Các tệp điều khiển khác không, sự phụ thuộc của tiện ích kèo bóng đá c1 vàoBar
sẽ bị loại bỏ khi cập nhật từ1.0
sang phiên bản khác.
Các tiện ích kèo bóng đá c1 được phân phối rộng rãi sẽ giả sử rất ít về cơ sở dữ liệu mà họ chiếm. Do đó, việc viết các chức năng được cung cấp bởi một tiện ích kèo bóng đá c1 theo kiểu an toàn không 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 kèo bóng đá c1 cóSuperuser
Thuộ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ông 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 kèo bóng đá c1 được viết bất cẩn, cho phép người dùng đó có được các đặc quyền Superuser.
Nếu một phần kèo bóng đá c1 được đánh dấuTrusted
45524_45862
Lời khuyên về việc viết kèo bóng đá c1 chức năng được cung cấp một cách an toàn trongkèo bóng đá c1 37.17.6.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 kèo bóng đá c1 cách an toàn trongkèo bóng đá c1 37.17.6.2.
Các hàm ngôn ngữ SQL và ngôn ngữ PL được cung cấp bởi các phần kèo bóng đá c1 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 tại thời điểm thực hiện không phải là thời gian tạo.
TheTạo chức năng
Trang tham khảo chứa lời khuyên về viếtbảo mật xác định
chức năng an toàn. Đó là thực tế tốt để áp dụng các kỹ thuật đó cho bất kỳ chức năng nào được cung cấp bởi một tiện ích kèo bóng đá c1, vì chức năng có thể được gọi bởi người dùng đặc quyền cao.
Nếu bạn không thể đặtsearch_path
Chỉ chứa kèo bóng đá c1 lược đồ an toàn, giả sử rằng mỗi tên không đủ 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 kèo bóng đá c1 cấu trúc phụ thuộc vàosearch_path
ngầm; Ví dụ,in
vàcase
Luôn chọn toán tử bằng đường dẫn tìm kiếm. Ở vị trí của họ, sử dụngBiểu thức
Khitoán tử (
vàSchema
. =) Bất kỳtrường hợp khi
.Biểu thức
Một tiện ích kèo bóng đá c1 có mục đích chung thường không 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ó cũng không hoàn toàn không có rủi ro. Ví dụ: nếu tiện ích kèo bóng đá c1 đã xác định chức năngmyschema.myfunc (bigint)
Sau đó, kèo bóng đá c1 cuộc gọi nhưmyschema.myfunc (42)
Có thể bị bắt bởi chức năng thù địchmyschema.myfunc (integer)
. Hãy cẩn thận rằng kèo bóng đá c1 loại dữ liệu của kèo bóng đá c1 tham số chức năng và toán tử khớp chính xác với kèo bóng đá c1 loại đối số được khai báo, sử dụng kèo bóng đá c1 diễn viên rõ ràng khi cần thiết.
Cài đặt kèo bóng đá c1 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 tìm kiếm xảy ra 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 kèo bóng đá c1 được xác định sai.
kèo bóng đá c1 lệnh DDL nhưTạo chức năng
vàTạo lớp toán tử
thường an toàn, nhưng hãy cẩn thận với bất kỳ lệnh nào có biểu thức mục đích chung như kèo bóng đá c1 thành phần. Ví dụ,Tạo chế độ xem
Cần được xem xét, cũng nhưmặc định
49611_49628Tạo chức năng
.
Đôi khi một tập lệnh kèo bóng đá c1 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ông 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
49918_49925khôngTin tưởng đường dẫn được cung cấp bởiTạo/thay đổi tiện ích kèo bóng đá c1
Để được bảo mật. Thực hành tốt nhất là đặt tạm thờisearch_path
đếnpg_catalog, pg_temp
và chèn tham chiếu vào lược đồ cài đặt của tiện ích kèo bóng đá c1 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đóng góp
Mô -đun trongPostgreSQLPhân phối mã nguồn.
50497_50834search_path
. Tuy nhiên, không có cơ chế hiện đang tồn tại để yêu cầu điều đó. Hiện tại, thực tế tốt nhất là không đánh dấu một phần kèo bóng đá c1 đáng tin cậy nếu nó phụ thuộc vào cái khác, trừ khi cái khác luôn được cài đặt trongpg_catalog
.
Đây là kèo bóng đá c1 ví dụ hoàn chỉnh vềSQL51418_51529KvàMạnhV. kèo bóng đá c1 giá trị không 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.sql
Trông như thế này:
- Khiếu nại nếu tập lệnh có nguồn gốc từ PSQL, thay vì thông qua Tạo tiện ích kèo bóng đá c1 \ Echo Sử dụng "Tạo cặp kèo bóng đá c1" để 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, relinesarg = text, function = pair); - "Đặ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ăng 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ăng 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.Control
Trông như thế này:
# Phần kèo bóng đá c1 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ông cần kèo bóng đá c1 makefile để cài đặt hai tệp này vào thư mục chính xác, bạn có thể sử dụngMakefile
Chứa này:
Tiện ích kèo bóng đá c1 = cặp 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ả trongkèo bóng đá c1 37,18. LệnhTạo cài đặt
Sẽ cài đặt kèo bóng đá c1 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 kèo bóng đá c1 tệp, hãy sử dụngTạo tiện ích kèo bóng đá c1lệnh để tải kèo bóng đá c1 đối tượng vào bất kỳ cơ sở dữ liệu cụ thể nào.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.