PostgreSQL: soi kèo bóng đá truoctran | |||
---|---|---|---|
prev | UP | Phụ lục F. kèo bóng đá c1 mô -đun được cung cấp bổ sung | Tiếp theo |
ThePOSTGRES_FDWMô-đun cung cấp trình bao bọc dữ liệu kèo bóng đá c1POSTGRES_FDW8513_8569PostgreSQLkèo bóng đá c1 chủ.
Chức năng được cung cấp bởi mô -đun này chồng lên đáng kể với chức năng của người cũDBLINKMô -đun. NhưngPOSTGRES_FDWCung cấp cú pháp tuân thủ tiêu chuẩn và trong suốt hơn để truy cập kèo bóng đá c1 bảng từ xa và có thể cho hiệu suất tốt hơn trong nhiều trường hợp.
Để chuẩn bị cho quyền truy cập kèo bóng đá c1 bằng cách sử dụngPostgres_FDW:
Cài đặtPostgres_FDWPhần mở rộng bằng cách sử dụngPostgreSQL: Tài liệu:.
Tạo đối tượng máy chủ kèo bóng đá c1, sử dụngPostgreSQL:, để đại diện cho mỗi cơ sở dữ liệu kèo bóng đá c1 bạn muốn kết nối. Chỉ định thông tin kết nối, ngoại trừuservàMật khẩu, là tùy chọn của đối tượng kèo bóng đá c1 chủ.
Tạo ánh xạ người dùng, sử dụngPostgreSQL: Tài, Đối với mỗi người dùng cơ sở dữ liệu mà bạn muốn cho phép truy cập vào mỗi máy chủ nước ngoài. Chỉ định tên người dùng và mật khẩu kèo bóng đá c1 để sử dụng làuservàMật khẩuTùy chọn ánh xạ người dùng.
Tạo một bảng kèo bóng đá c1, sử dụngPostgreSQL: Tài liệu:hoặcPostgreSQL: Tài liệu:, cho mỗi bảng từ xa bạn muốn truy cập. kèo bóng đá c1 cột của Bàn nước ngoài phải khớp với bảng từ xa được tham chiếu. Tuy nhiên, bạn có thể sử dụng tên bảng và/hoặc cột khác với bảng từ xa, nếu bạn chỉ định tên từ xa chính xác là kèo bóng đá c1 tùy chọn của đối tượng bảng nước ngoài.
Bây giờ bạn chỉ cầnChọnTừ một bảng nước ngoài để truy cập dữ liệu được lưu trữ trong bảng kèo bóng đá c1 cơ bản của nó. Bạn cũng có thể sửa đổi bảng kèo bóng đá c1 bằngChèn, Cập nhậthoặcXóa. .
Lưu ý rằngPostgres_FDWHiện đang thiếu hỗ trợ choChènCâu nói vớitrên xung đột do cập nhậtmệnh đề. Tuy nhiên,trên xung đột không làm gìmệnh đề được hỗ trợ, cung cấp một đặc tả suy luận chỉ số duy nhất bị bỏ qua.
Thông thường kèo bóng đá c1 cột của một bảng nước ngoài được khai báo với chính xác kèo bóng đá c1 loại dữ liệu và đối chiếu nếu có thể, như kèo bóng đá c1 cột được tham chiếu của bảng từ xa. Mặc dùPostgres_FDW11265_11463WHEREmệnh đề hơi khác so với kèo bóng đá c1 chủ cục bộ.
Lưu ý rằng một bảng nước ngoài có thể được khai báo với ít cột hơn hoặc với một thứ tự cột khác, so với bảng từ xa cơ bản của nó có. Kết hợp kèo bóng đá c1 cột với bảng từ xa là theo tên, không phải vị trí.
Một máy chủ kèo bóng đá c1 sử dụng12035_1204912052_12107libpqChấp nhận trong kèo bóng đá c1 chuỗi kết nối, như được mô tả trongPhần 31.1.2, ngoại trừ việc kèo bóng đá c1 tùy chọn này không được phép:
uservàMật khẩu(Chỉ định những điều này trong ánh xạ người dùng, thay vào đó)
client_encoding(Điều này được đặt tự động từ mã hóa kèo bóng đá c1 chủ cục bộ)
fallback_application_name(luôn luôn được đặt thànhPOSTGRES_FDW)
Chỉ kèo bóng đá c1 siêu người dùng mới có thể kết nối với máy chủ nước ngoài mà không cần xác thực mật khẩu, vì vậy hãy luôn chỉ địnhMật khẩuTùy chọn cho ánh xạ người dùng thuộc về người không siêu giám sát.
kèo bóng đá c1 tùy chọn này có thể được sử dụng để kiểm soát kèo bóng đá c1 tên được sử dụng trong kèo bóng đá c1 câu lệnh SQL được gửi đến điều khiển từ xaPostgreSQLMáy chủ. kèo bóng đá c1 tùy chọn này là cần thiết khi một bảng nước ngoài được tạo với tên khác với tên của bảng từ xa bên dưới.
13376_13582
Tùy chọn này, có thể được chỉ định cho một bảng nước ngoài, đưa ra tên bảng để sử dụng cho bàn nước ngoài trên máy chủ kèo bóng đá c1. Nếu tùy chọn này bị bỏ qua, tên của Bàn nước ngoài sẽ được sử dụng.
Tùy chọn này, có thể được chỉ định cho một cột của một bảng nước ngoài, đưa ra tên cột để sử dụng cho cột trên máy chủ kèo bóng đá c1. Nếu tùy chọn này bị bỏ qua, tên của cột sẽ được sử dụng.
Postgres_FDWLấy dữ liệu từ xa bằng cách thực hiện kèo bóng đá c1 truy vấn đối với kèo bóng đá c1 máy chủ từ xa, vì vậy lý tưởng là chi phí ước tính của việc quét một bảng nước ngoài nên là bất cứ điều gì cần thực hiện trên máy chủ từ xa, cộng với một số chi phí liên lạc. Cách đáng tin cậy nhất để có được ước tính như vậy là hỏi máy chủ từ xa và sau đó thêm một cái gì đó cho chi phí - nhưng đối với kèo bóng đá c1 truy vấn đơn giản, nó có thể không xứng đáng với chi phí của một truy vấn từ xa bổ sung để ước tính chi phí. Vì thếpostgres_fdwCung cấp kèo bóng đá c1 tùy chọn sau để kiểm soát cách ước tính chi phí được thực hiện:
Tùy chọn này, có thể được chỉ định cho một bàn kèo bóng đá c1 hoặc máy chủ kèo bóng đá c1, điều khiển cho dùPostgres_FDWvấn đề kèo bóng đá c1Giải thíchkèo bóng đá c1 lệnh để có được ước tính chi phí. Một cài đặt cho một bảng nước ngoài ghi đè bất kỳ cài đặt nào cho máy chủ của nó, nhưng chỉ cho bảng đó. Mặc định làfalse.
Tùy chọn này, có thể được chỉ định cho máy chủ nước ngoài, là một giá trị số được thêm vào chi phí khởi động ước tính của bất kỳ lần quét bảng nước ngoài nào trên máy chủ đó. Điều này thể hiện chi phí bổ sung của việc thiết lập kết nối, phân tích cú pháp và lập kế hoạch truy vấn ở phía kèo bóng đá c1, v.v ... Giá trị mặc định là100.
15760_161170.01.
khiuse_remote_estimatelà đúng,Postgres_FDWcó được số lượng hàng và ước tính chi phí từ máy chủ kèo bóng đá c1 và sau đó thêmfdw_startup_costvàfdw_tuple_costvới ước tính chi phí. Khiuse_remote_estimatelà sai,POSTGRES_FDWThực hiện số lượng hàng địa phương và ước tính chi phí và sau đó thêmfdw_startup_costvàfdw_tuple_costvới ước tính chi phí. Ước tính địa phương này khó có thể rất chính xác trừ khi kèo bóng đá c1 bản sao cục bộ của số liệu thống kê của bảng từ xa có sẵn. Đang chạyPhân tíchTrên bàn nước ngoài là cách cập nhật số liệu thống kê địa phương; Điều này sẽ thực hiện quét bảng từ xa và sau đó tính toán và lưu trữ số liệu thống kê giống như bảng là cục bộ. Giữ số liệu thống kê cục bộ có thể là một cách hữu ích để giảm chi phí lập kế hoạch cho mỗi người cho một bảng từ xa-nhưng nếu bảng điều khiển từ xa được cập nhật thường xuyên, kèo bóng đá c1 số liệu thống kê địa phương sẽ sớm bị lỗi thời.
Theo mặc định, tất cả kèo bóng đá c1 bảng nước ngoài bằng cách sử dụngPOSTGRES_FDWđược coi là có thể cập nhật. Điều này có thể được ghi đè bằng tùy chọn sau:
Tùy chọn này có kiểm soát xemPostgres_FDWCho phép kèo bóng đá c1 bảng nước ngoài được sửa đổi bằng cách sử dụngChèn, Cập nhậtvàXóalệnh. Nó có thể được chỉ định cho một bàn kèo bóng đá c1 hoặc một máy chủ kèo bóng đá c1. Một tùy chọn cấp bảng ghi đè một tùy chọn cấp máy chủ. Mặc định làTRUE.
Tất nhiên, nếu bảng kèo bóng đá c1 không thực tế có thể cập nhật, dù sao cũng sẽ xảy ra lỗi. Việc sử dụng tùy chọn này chủ yếu cho phép lỗi được ném cục bộ mà không cần truy vấn máy chủ kèo bóng đá c1. Tuy nhiên, lưu ý rằngthông tin_schemalượt xem sẽ báo cáo APOSTGRES_FDWBảng nước ngoài có thể cập nhật (hoặc không) theo cài đặt của tùy chọn này, mà không cần kiểm tra máy chủ kèo bóng đá c1.
Postgres_FDWCó thể nhập kèo bóng đá c1 định nghĩa về bàn nước ngoài bằng cách sử dụngPostgreSQL: Tài liệu:. Lệnh này tạo ra kèo bóng đá c1 định nghĩa về bảng nước ngoài trên máy chủ cục bộ phù hợp với kèo bóng đá c1 bảng hoặc chế độ xem có trên máy chủ từ xa. Nếu kèo bóng đá c1 bảng từ xa được nhập, có kèo bóng đá c1 cột của kèo bóng đá c1 loại dữ liệu do người dùng xác định, máy chủ cục bộ phải có kèo bóng đá c1 loại tương thích cùng tên.
Hành vi nhập khẩu có thể được tùy chỉnh với kèo bóng đá c1 tùy chọn sau (được đưa ra trongNhập lược đồ kèo bóng đá c1lệnh):
Tùy chọn này có kiểm soát liệu cộtđối chiếuTùy chọn được bao gồm trong kèo bóng đá c1 định nghĩa về kèo bóng đá c1 bảng nước ngoài được nhập từ máy chủ nước ngoài. Mặc định làTRUE. Bạn có thể cần tắt điều này nếu máy chủ kèo bóng đá c1 có một bộ đối chiếu khác với máy chủ cục bộ, có khả năng là trường hợp nếu nó chạy trên một hệ điều hành khác.
Tùy chọn này có kiểm soát liệu cộtmặc địnhkèo bóng đá c1 biểu thức được bao gồm trong kèo bóng đá c1 định nghĩa về kèo bóng đá c1 bảng nước ngoài được nhập từ một máy chủ nước ngoài. Mặc định làSai. Nếu bạn kích hoạt tùy chọn này, hãy cảnh giác với kèo bóng đá c1 mặc định có thể được tính toán khác nhau trên máy chủ cục bộ so với máy chủ từ xa;nextVal ()
là một nguồn vấn đề phổ biến. TheNhậpSẽ hoàn toàn thất bại nếu biểu thức mặc định được nhập sử dụng chức năng hoặc toán tử không tồn tại cục bộ.
Tùy chọn này kiểm soát cộtkhông nullkèo bóng đá c1 ràng buộc được bao gồm trong kèo bóng đá c1 định nghĩa về kèo bóng đá c1 bảng nước ngoài được nhập từ một máy chủ nước ngoài. Mặc định làTRUE.
Lưu ý rằng kèo bóng đá c1 ràng buộc khác vớikhông nullsẽ không bao giờ được nhập từ kèo bóng đá c1 bảng từ xa. Mặc dùPostgreSQLkhông hỗ trợKiểm tra20821_21064Kiểm traràng buộc có thể dẫn đến kèo bóng đá c1 lỗi khó phát hiện trong tối ưu hóa truy vấn. Vì vậy, nếu bạn muốn nhậpKiểm trakèo bóng đá c1 ràng buộc, bạn phải làm như vậy theo cách thủ công và bạn nên xác minh ngữ nghĩa của từng người một cách cẩn thận. Để biết thêm chi tiết về việc điều trịKiểm trakèo bóng đá c1 ràng buộc trên kèo bóng đá c1 bảng nước ngoài, xemPostgreSQL: Tài liệu:.
Postgres_FDWThiết lập kết nối với máy chủ nước ngoài trong truy vấn đầu tiên sử dụng bàn nước ngoài được liên kết với máy chủ nước ngoài. Kết nối này được giữ và sử dụng lại cho kèo bóng đá c1 truy vấn tiếp theo trong cùng một phiên. Tuy nhiên, nếu nhiều danh tính người dùng (ánh xạ người dùng) được sử dụng để truy cập máy chủ nước ngoài, kết nối được thiết lập cho mỗi ánh xạ người dùng.
Trong một truy vấn tham khảo bất kỳ bảng kèo bóng đá c1 nào trên máy chủ nước ngoài,Postgres_FDWMở giao dịch trên máy chủ từ xa nếu một người chưa mở tương ứng với giao dịch cục bộ hiện tại. Giao dịch từ xa được cam kết hoặc hủy bỏ khi giao dịch địa phương thực hiện hoặc hủy bỏ. kèo bóng đá c1 điểm lưu được quản lý tương tự bằng cách tạo kèo bóng đá c1 điểm lưu từ xa tương ứng.
Giao dịch kèo bóng đá c1 sử dụngserializable22605_22655serializableMức cách ly; nếu không thì nó sử dụngĐọc lặp lạiMức cách ly. Lựa chọn này đảm bảo rằng nếu một truy vấn thực hiện nhiều lần quét bảng trên máy chủ từ xa, nó sẽ nhận được kết quả phù hợp với ảnh chụp nhanh cho tất cả kèo bóng đá c1 lần quét. Hậu quả là kèo bóng đá c1 truy vấn liên tiếp trong một giao dịch sẽ thấy cùng một dữ liệu từ máy chủ từ xa, ngay cả khi kèo bóng đá c1 bản cập nhật đồng thời xảy ra trên máy chủ từ xa do kèo bóng đá c1 hoạt động khác. Hành vi đó dù sao cũng sẽ được mong đợi nếu giao dịch cục bộ sử dụngserializablehoặcĐọc lặp lạiCấp độ cô lập, nhưng có thể đáng ngạc nhiên cho AĐọc cam kết23374_23405PostgreSQLPhát hành có thể sửa đổi kèo bóng đá c1 quy tắc này.
Lưu ý rằng nó hiện không được hỗ trợ bởipostgres_fdwĐể chuẩn bị giao dịch kèo bóng đá c1 cho cam kết hai pha.
POSTGRES_FDWcố gắng tối ưu hóa kèo bóng đá c1 truy vấn từ xa để giảm lượng dữ liệu được truyền từ kèo bóng đá c1 máy chủ nước ngoài. Điều này được thực hiện bằng cách gửi truy vấnWHEREĐiều khoản đến máy chủ từ xa để thực thi và không lấy kèo bóng đá c1 cột bảng không cần thiết cho truy vấn hiện tại. Để giảm nguy cơ mắc bệnh truy vấn,WHEREkèo bóng đá c1 điều khoản không được gửi đến máy chủ từ xa trừ khi chúng chỉ sử dụng kèo bóng đá c1 loại dữ liệu, toán tử và chức năng tích hợp. Toán tử và chức năng trong kèo bóng đá c1 mệnh đề phải làbất biến
Truy vấn thực sự được gửi đến máy chủ kèo bóng đá c1 để thực thi có thể được kiểm tra bằng cách sử dụngGiải thích Verbose.
Trong kèo bóng đá c1 phiên từ xa được mở bởiPOSTGRES_FDW, Thesearch_pathTham số được đặt thành chỉpg_catalog, do đó chỉ hiển thị kèo bóng đá c1 đối tượng tích hợp mà không có trình độ lược đồ. Đây không phải là vấn đề cho kèo bóng đá c1 truy vấn được tạo bởiPOSTGRES_FDW24998_25394Đặt search_pathTùy chọn (xemPostgreSQL: Tài) đến kèo bóng đá c1 chức năng như vậy để thiết lập môi trường đường dẫn tìm kiếm dự kiến của họ.
POSTGRES_FDWTương tự như vậy, thiết lập cài đặt phiên từ xa cho kèo bóng đá c1 tham sốtimezone, Datestyle, IntervalStylevàExtra_float_digits. Những điều này ít có khả năng có vấn đề hơnsearch_path, nhưng có thể được xử lý với chức năngsetTùy chọn nếu có nhu cầu.
Đó làkhôngkhuyến nghị bạn sẽ ghi đè hành vi này bằng cách thay đổi cài đặt cấp phiên của kèo bóng đá c1 tham số này; có khả năng gây rapostgres_fdwđến trục trặc.
postgres_fdwcó thể được sử dụng với kèo bóng đá c1 máy chủ từ xa có niên đạiPostgreSQL26650_26734POSTGRES_FDWNói chung giả sử rằng kèo bóng đá c1 hàm và toán tử tích hợp bất biến có thể an toàn để gửi đến máy chủ từ xa để thực thi, nếu chúng xuất hiện trongWHERE26940_27094"Chức năng không tồn tại"hoặc một lỗi tương tự. Loại thất bại này có thể được làm việc xung quanh bằng cách viết lại truy vấn, ví dụ bằng cách nhúng tham chiếu bàn kèo bóng đá c1 vào một phụ-ChọnvớiOffset 0Là một hàng rào tối ưu hóa và đặt hàm hoặc toán tử có vấn đề bên ngoài phụ-Chọn.
Đây là một ví dụ về việc tạo ra một bảng kèo bóng đá c1 vớiPOSTGRES_FDW. Lần đầu tiên cài đặt tiện ích mở rộng:
Tạo phần mở rộng Postgres_fdw;
Sau đó tạo một máy chủ kèo bóng đá c1 bằng cách sử dụngPostgreSQL:. Trong ví dụ này, chúng tôi muốn kết nối vớiPostgreSQLkèo bóng đá c1 chủ trên kèo bóng đá c1 chủ192.83.123.89nghe trên cổng5432. Cơ sở dữ liệu mà kết nối được thực hiện được đặt tênFRIANT_DBTrên máy chủ kèo bóng đá c1:
Tạo máy chủ nước ngoài_server Vòng bao bọc dữ liệu kèo bóng đá c1 Postgres_fdw Tùy chọn (máy chủ '192.83.123.89', cổng '5432', dbname 'foreign_db');
Ánh xạ người dùng, được xác định vớiPostgreSQL: Tài, cũng cần xác định vai trò sẽ được sử dụng trên máy chủ kèo bóng đá c1:
Tạo ánh xạ người dùng cho local_user kèo bóng đá c1 chủ nước ngoài_server Tùy chọn (người dùng 'foreign_user', mật khẩu 'mật khẩu');
Bây giờ có thể tạo một bàn kèo bóng đá c1 vớiPostgreSQL: Tài liệu:. Trong ví dụ này, chúng tôi muốn truy cập bảng có tên28887_2891128914_28969FRIANT_TABLE:
Tạo Taber Foreign_Table ( Id Integer không null, Văn bản dữ liệu ) kèo bóng đá c1 chủ nước ngoài_server Tùy chọn (Schema_name 'Some_Schema', Table_Name 'some_table');
Điều cần thiết là kèo bóng đá c1 loại dữ liệu và kèo bóng đá c1 thuộc tính khác của kèo bóng đá c1 cột được khai báo trongTạo bảng kèo bóng đá c1Kết hợp bảng điều khiển kèo bóng đá c1 thực tế. Tên cột cũng phải khớp, trừ khi bạn đính kèmCột_nameTùy chọn cho kèo bóng đá c1 cột riêng lẻ để hiển thị cách chúng được đặt tên trong bảng từ xa. Trong nhiều trường hợp, sử dụngPostgreSQL: Tài liệu:tốt hơn là xây dựng kèo bóng đá c1 định nghĩa bàn nước ngoài theo cách thủ công.
Shigeru Hanada<Shigeru.hanada@gmail