婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Postgresql分布式插件plproxy的使用詳解

Postgresql分布式插件plproxy的使用詳解

熱門標簽:400電話申請客服 電銷機器人能補救房產(chǎn)中介嗎 廣州電銷機器人公司招聘 電話機器人怎么換人工座席 移動外呼系統(tǒng)模擬題 地圖標注要花多少錢 濟南外呼網(wǎng)絡電話線路 天津開發(fā)區(qū)地圖標注app 江蘇400電話辦理官方

Simple remote function call

節(jié)點61/62(datanode)

CREATE TABLE users (username text, email text);
insert into users values ('user0', 'user0@gmail.com');
insert into users values ('user1', 'user1@gmail.com');
insert into users values ('user2', 'user2@gmail.com');

節(jié)點60(proxy)

create or replace extension plproxy;
CREATE FUNCTION get_user_email(i_username text)
RETURNS SETOF text AS $$
 CONNECT 'host=localhost port=9461 dbname=postgres connect_timeout=10';
 SELECT email FROM users WHERE username = $1;
$$ LANGUAGE plproxy;
SELECT * from get_user_email('user0');

Configuring Pl/Proxy clusters with SQL/MED

節(jié)點60(proxy)

CREATE FOREIGN DATA WRAPPER plproxy;
CREATE SERVER usercluster FOREIGN DATA WRAPPER plproxy
OPTIONS (connection_lifetime '1800',
   p0 'host=localhost port=9461 dbname=postgres connect_timeout=10',
   p1 'host=localhost port=9462 dbname=postgres connect_timeout=10' );
CREATE USER MAPPING FOR PUBLIC SERVER usercluster;

Partitioned remote call

節(jié)點60(proxy)

CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)
RETURNS integer AS $$
 CLUSTER 'usercluster';
 RUN ON hashtext(i_username);
$$ LANGUAGE plproxy;

節(jié)點61/62(datanode)

CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)
RETURNS integer AS $$
  INSERT INTO users (username, email) VALUES ($1,$2);
  SELECT 1;
$$ LANGUAGE SQL;

Putting it all together

節(jié)點60(proxy)

SELECT insert_user('Sven','sven@somewhere.com');
SELECT insert_user('Marko', 'marko@somewhere.com');
SELECT insert_user('Steve','steve@somewhere.cm');

plproxy–2.7.0.sql

-- handler function
CREATE FUNCTION plproxy_call_handler ()
RETURNS language_handler AS 'plproxy' LANGUAGE C;
-- validator function
CREATE FUNCTION plproxy_validator (oid)
RETURNS void AS 'plproxy' LANGUAGE C;
-- language
CREATE LANGUAGE plproxy HANDLER plproxy_call_handler VALIDATOR plproxy_validator;
-- validator function
CREATE FUNCTION plproxy_fdw_validator (text[], oid)
RETURNS boolean AS 'plproxy' LANGUAGE C;
-- foreign data wrapper
CREATE FOREIGN DATA WRAPPER plproxy VALIDATOR plproxy_fdw_validator;

補充:PostgreSQL 水平分庫——plproxy

1、PL/Proxy安裝

1、1 編譯安裝

tar -zxvf plproxy-2.7.tar.gz
cd plproxy-2.7
source /home/postgres/.bashrc
make
make install

1、2 創(chuàng)建pl/proxy擴展

itm_pg@pgs-> psql
psql (10.3)
Type "help" for help.
postgres=# create database proxy;
CREATE DATABASE
postgres=# \c proxy 
You are now connected to database "proxy" as user "postgres".
proxy=# create extension plproxy;
CREATE EXTENSION
proxy=# \dx
                List of installed extensions
 Name  | Version |  Schema  |            Description       
      
---------+---------+------------+-----------------------------------------------
-----------
 plpgsql | 1.0   | pg_catalog | PL/pgSQL procedural language
 plproxy | 2.8.0  | public   | Database partitioning implemented as procedura
l language
(2 rows)

2、pl/proxy配置

修改數(shù)據(jù)庫節(jié)點pg_hba.conf:

修改兩個數(shù)據(jù)節(jié)點的pg_hba.conf,保證代理節(jié)點可以訪問。

# TYPE DATABASE    USER      ADDRESS         METHOD
 host all       all       192.168.7.177/32     trust

在SQL/MED方法在pl/proxy節(jié)點進行集群配置:

proxy=# create schema plproxy; --下面的函數(shù)都是創(chuàng)建在plproxy這個schema下面
CREATE SCHEMA
proxy=# create user bill superuser;
CREATE ROLE
--創(chuàng)建一個使用plproxy FDW的服務器
proxy=# CREATE SERVER cluster_srv1 FOREIGN DATA WRAPPER plproxy
proxy-#     OPTIONS (
proxy(#         connection_lifetime '1800',
proxy(#         disable_binary '1',
proxy(#         p0 'dbname=pl_db0 host=192.168.7.166',
proxy(#         p1 'dbname=pl_db1 host=192.168.17.190'
proxy(#         );
CREATE SERVER  
proxy=# \des
      List of foreign servers
   Name   | Owner | Foreign-data wrapper 
--------------+-------+----------------------
 cluster_srv1 | bill | plproxy
(1 row)
proxy=# grant usage on FOREIGN server cluster_srv1 to bill; 
GRANT
--創(chuàng)建用戶映射
proxy=# create user mapping for bill server cluster_srv1 options (user 'bill');
CREATE USER MAPPING
proxy=# \deu
 List of user mappings
  Server  | User name 
--------------+-----------
 cluster_srv1 | bill
(1 row)

配置完成!在"CLUSTER"模式中;才需要上述配置;在"CONNECT"模式中是不需要的。

3、pl/proxy測試

在兩個數(shù)據(jù)節(jié)點創(chuàng)建測試表:

postgres=# create database pl_db1;
CREATE DATABASE
postgres=# create user bill superuser;
CREATE ROLE
postgres=# \c pl_db1 bill 
You are now connected to database "pl_db1" as user "bill".
pl_db1=# create table users(userid int, name text);
CREATE TABLE

3、1數(shù)據(jù)水平拆分測試

在每個數(shù)據(jù)節(jié)點創(chuàng)建insert函數(shù)接口

pl_db1=# CREATE OR REPLACE FUNCTION insert_user(i_id int, i_name text)
pl_db1-# RETURNS integer AS $$
pl_db1$#    INSERT INTO users (userid, name) VALUES ($1,$2);
pl_db1$#    SELECT 1;
pl_db1$# $$ LANGUAGE SQL;
CREATE FUNCTION

–pl_db0節(jié)點一樣

2、在PL/Proxy數(shù)據(jù)庫創(chuàng)建同名的insert函數(shù)接口

proxy=# CREATE OR REPLACE FUNCTION insert_user(i_id int, i_name text)
proxy-# RETURNS integer AS $$
proxy$#   CLUSTER 'cluster_srv1';
proxy$#   RUN ON ANY;
proxy$# $$ LANGUAGE plproxy;
CREATE FUNCTION

3、在PL/Proxy數(shù)據(jù)庫創(chuàng)建讀的函數(shù)get_user_name()

proxy=# CREATE OR REPLACE FUNCTION get_user_name()
proxy-# RETURNS TABLE(userid int, name text) AS $$
proxy$#   CLUSTER 'cluster_srv1';
proxy$#   RUN ON ALL ;
proxy$# SELECT userid,name FROM users;
proxy$# $$ LANGUAGE plproxy;
CREATE FUNCTION

4、在pl/proxy節(jié)點插入數(shù)據(jù)進行測試

SELECT insert_user(1001, 'Sven');
SELECT insert_user(1002, 'Marko');
SELECT insert_user(1003, 'Steve');
SELECT insert_user(1004, 'bill');
SELECT insert_user(1005, 'rax');
SELECT insert_user(1006, 'ak');
SELECT insert_user(1007, 'jack');
SELECT insert_user(1008, 'molica');
SELECT insert_user(1009, 'pg');
SELECT insert_user(1010, 'oracle');

5、在節(jié)點數(shù)據(jù)庫查看數(shù)據(jù)分布情況

pl_db1=# select * from users;
 userid | name 
--------+-------
  1001 | Sven
  1003 | Steve
  1004 | bill
(3 rows)

我們在proxy節(jié)點查詢下:

proxy=# SELECT USERID,NAME FROM GET_USER_NAME();
 userid | name 
--------+--------
  1005 | rax
  1006 | ak
  1008 | molica
  1009 | pg
  1002 | Marko
  1004 | bill
  1007 | jack
  1010 | oracle
  1001 | Sven
  1003 | Steve
(10 rows)

因為創(chuàng)建insert_user函數(shù)時使用的是ROW ON ANY,表示隨機再一臺機器上進行執(zhí)行,因此實現(xiàn)了數(shù)據(jù)在不同節(jié)點的隨機分布,接下來改成ROW ON ALL,實驗在不同節(jié)點進行數(shù)據(jù)的復制。

run on , 是數(shù)字常量, 范圍是0 到 nodes-1; 例如有4個節(jié)點 run on 0; (run on 4則報錯).

run on ANY,

run on function(…), 這里用到的函數(shù)返回結果必須是int2, int4 或 int8.

run on ALL, 這種的plproxy函數(shù)必須是returns setof…, 實體函數(shù)沒有setof的要求.

3、2數(shù)據(jù)復制測試

選擇users表作為實驗對象;我們先清理表users數(shù)據(jù);在數(shù)據(jù)節(jié)點創(chuàng)建truncatet函數(shù)接口

pl_db1=# CREATE OR REPLACE FUNCTION trunc_user()
pl_db1-# RETURNS integer AS $$
pl_db1$#    truncate table users;
pl_db1$#    SELECT 1;
pl_db1$# $$ LANGUAGE SQL;
CREATE FUNCTION

2、在PL/Proxy數(shù)據(jù)庫創(chuàng)建同名的truncate函數(shù)接口

proxy=# CREATE OR REPLACE FUNCTION trunc_user()
proxy-# RETURNS SETOF integer AS $$
proxy$#    CLUSTER 'cluster_srv1';
proxy$#    RUN ON ALL;
proxy$#  $$ LANGUAGE plproxy;
CREATE FUNCTION

–檢查發(fā)現(xiàn)數(shù)據(jù)已經(jīng)清理掉了

proxy=# SELECT TRUNC_USER();
 trunc_user 
------------
     1
     1
(2 rows)

3、在PL/Proxy數(shù)據(jù)庫創(chuàng)建函數(shù)接口 insert_user_2

proxy=# CREATE OR REPLACE FUNCTION insert_user_2(i_id int, i_name text)
proxy-#  RETURNS SETOF integer AS $$
proxy$#    CLUSTER 'cluster_srv1';
proxy$#    RUN ON ALL;
proxy$#  TARGET insert_user;
proxy$#  $$ LANGUAGE plproxy;
CREATE FUNCTION

4、插入幾條數(shù)據(jù)

proxy=# SELECT insert_user_2(1004, 'bill');
 insert_user_2 
---------------
       1
       1
(2 rows)
proxy=# SELECT insert_user_2(1005, 'rax');
 insert_user_2 
---------------
       1
       1
(2 rows)
proxy=# SELECT insert_user_2(1006, 'ak');
 insert_user_2 
---------------
       1
       1
(2 rows)
proxy=# SELECT insert_user_2(1007, 'jack');
 insert_user_2 
---------------
       1
       1
(2 rows)

5、查看每個節(jié)點數(shù)據(jù)情況

pl_db1=# select * from users;
 userid | name 
--------+-------
  1004 | bill
  1005 | rax
  1006 | ak
  1007 | jack
(4 rows)
pl_db0=# select * from users;
 userid | name 
--------+-------
  1004 | bill
  1005 | rax
  1006 | ak
  1007 | jack
(4 rows)

兩個數(shù)據(jù)節(jié)點的數(shù)據(jù)一樣,實現(xiàn)了數(shù)據(jù)的復制。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 在PostgreSQL中設置表中某列值自增或循環(huán)方式
  • 基于PostgreSQL密碼重置操作
  • PostgreSQL 實現(xiàn)登錄及修改密碼操作
  • Postgresql 默認用戶名與密碼的操作
  • postgresql 中的加密擴展插件pgcrypto用法說明
  • PostgreSQL表膨脹監(jiān)控案例(精確計算)

標簽:溫州 榆林 寶雞 海西 杭州 濮陽 昭通 辛集

巨人網(wǎng)絡通訊聲明:本文標題《Postgresql分布式插件plproxy的使用詳解》,本文關鍵詞  Postgresql,分布式,插件,plproxy,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Postgresql分布式插件plproxy的使用詳解》相關的同類信息!
  • 本頁收集關于Postgresql分布式插件plproxy的使用詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产aⅴ精品一区二区三区色成熟| 欧美精品久久一区二区三区| 97久久超碰国产精品电影| 欧美乱熟臀69xxxxxx| 亚洲免费电影在线| 99精品视频一区二区三区| 久久亚洲精华国产精华液 | 欧美性大战xxxxx久久久| 亚洲免费观看高清完整版在线观看 | 亚洲一卡二卡三卡四卡无卡久久| 国产99精品视频| 中文字幕国产一区| 91美女在线看| 午夜影院久久久| 久久午夜老司机| 97久久精品人人澡人人爽| 一二三区精品福利视频| 欧美日韩国产综合久久 | 亚洲精品高清在线| 欧美日韩国产在线播放网站| 五月天激情综合网| 久久婷婷综合激情| 成人国产免费视频| 亚洲免费伊人电影| 精品日韩99亚洲| 成人动漫精品一区二区| 亚洲一区av在线| 国产天堂亚洲国产碰碰| 欧美三级欧美一级| 国内久久精品视频| 亚洲卡通欧美制服中文| 日韩一级二级三级| a4yy欧美一区二区三区| 日本va欧美va精品发布| 国产午夜精品一区二区三区视频 | 激情小说亚洲一区| 欧美va亚洲va香蕉在线| 成人中文字幕电影| 五月婷婷激情综合网| 久久久国产综合精品女国产盗摄| 成人国产一区二区三区精品| 亚洲第一搞黄网站| 久久久国产午夜精品| 一卡二卡三卡日韩欧美| www国产精品av| 在线观看亚洲精品视频| 懂色一区二区三区免费观看| 蜜臀av亚洲一区中文字幕| 亚洲人成网站在线| 久久九九99视频| 日韩欧美精品在线视频| 色诱视频网站一区| 成人精品电影在线观看| 九色综合国产一区二区三区| 亚洲精品视频在线| 国产精品高潮呻吟| 国产蜜臀97一区二区三区| 日韩欧美久久久| 日韩丝袜美女视频| 欧美丰满嫩嫩电影| 欧美日韩一区二区在线观看视频 | 亚洲一区二区精品视频| 中文在线免费一区三区高中清不卡| 日韩一卡二卡三卡四卡| 欧美日本一区二区三区四区 | 欧美吞精做爰啪啪高潮| 91麻豆精品在线观看| 成人黄色在线视频| av激情综合网| 成人99免费视频| 99视频国产精品| 99久久er热在这里只有精品15| 成人动漫视频在线| 91网页版在线| 91福利国产成人精品照片| 色美美综合视频| 色婷婷久久久久swag精品| 成人免费视频国产在线观看| 国产91精品免费| 97se亚洲国产综合自在线| 在线中文字幕一区| 欧美色男人天堂| 91精品国产免费久久综合| 91麻豆精品国产91久久久久久| 欧美一区中文字幕| 日韩欧美亚洲国产精品字幕久久久| 精品国产一区a| 国产欧美一区二区精品忘忧草| 欧美极品xxx| 亚洲精品日产精品乱码不卡| 亚洲狠狠爱一区二区三区| 天堂精品中文字幕在线| 美国十次了思思久久精品导航| 国产乱妇无码大片在线观看| 成人美女视频在线看| 在线亚洲免费视频| 欧美一级高清片| 国产区在线观看成人精品| 一区二区三区毛片| 国产一区在线视频| 色8久久人人97超碰香蕉987| 日韩一级在线观看| 亚洲乱码国产乱码精品精小说| 日日欢夜夜爽一区| 成人开心网精品视频| 欧美剧情片在线观看| 欧美国产在线观看| 亚洲综合色网站| 国产精品1区2区| 欧美日韩另类国产亚洲欧美一级| 久久理论电影网| 亚洲第一主播视频| 波多野结衣在线aⅴ中文字幕不卡| 欧美性生活久久| 国产肉丝袜一区二区| 日韩高清在线不卡| 色哟哟一区二区三区| 久久蜜桃香蕉精品一区二区三区| 亚洲图片欧美视频| 色哟哟欧美精品| 久久精品视频免费| 水蜜桃久久夜色精品一区的特点| a在线欧美一区| 久久免费视频一区| 日本亚洲免费观看| 色综合一区二区| 亚洲精品国产a久久久久久| 午夜不卡av在线| 97久久久精品综合88久久| 久久久久久电影| 久久se精品一区精品二区| 欧美美女bb生活片| 亚洲精品网站在线观看| 成人动漫在线一区| 国产精品无人区| 乱一区二区av| 日韩午夜小视频| 琪琪久久久久日韩精品| 精品视频一区 二区 三区| 亚洲精品视频一区| 色综合一区二区| 亚洲成人第一页| 欧美亚洲禁片免费| 亚洲成人av中文| 欧美丰满嫩嫩电影| 爽爽淫人综合网网站| 日韩久久免费av| 久久99国产精品久久| 精品国产欧美一区二区| 国产一区二区三区蝌蚪| 久久亚洲精精品中文字幕早川悠里| 国产一区二区三区四区五区美女 | 国产精品高潮呻吟久久| 国产精品一区二区久久精品爱涩| 精品国产自在久精品国产| 美女视频一区二区| 国产亚洲综合性久久久影院| 东方aⅴ免费观看久久av| 亚洲精品日产精品乱码不卡| 欧美另类高清zo欧美| 蜜臀av一区二区| 国产三级欧美三级日产三级99 | 国产精品一区二区黑丝| 中文字幕av不卡| 欧美唯美清纯偷拍| 精品亚洲porn| 亚洲丝袜自拍清纯另类| 欧美性色欧美a在线播放| 手机精品视频在线观看| 久久九九国产精品| 91福利精品第一导航| 蜜臀av一区二区三区| 中文字幕中文字幕一区| 在线观看成人小视频| 毛片一区二区三区| 日韩毛片一二三区| 日韩一区二区三区免费看| 国产91丝袜在线观看| 亚洲国产日韩a在线播放性色| 日韩视频在线观看一区二区| 高清在线不卡av| 午夜久久久久久久久久一区二区| 日韩你懂的电影在线观看| 成人毛片视频在线观看| 日本欧美在线看| 亚洲精品福利视频网站| 欧美激情一区三区| 日韩一区二区在线看片| 成人黄色综合网站| 国产精品夜夜爽| 亚洲自拍偷拍网站| 久久久久久久久蜜桃| 91精品国产品国语在线不卡| 91啪在线观看| 国产福利精品一区二区| 男人的天堂久久精品| 午夜久久久影院| 亚洲成av人片www| 亚洲精品中文在线影院| 中文字幕一区二区三区不卡|