54 CHEN

Plproxy部署手册

安装过程如下:

1 安装plproxy:下载plproxy.安装完成plproxy后,运行{$PATH_TO_PG}/share/contrib/plproxy.sql

2 建立数据库_proxy;

3 建立plpgsql语言;

4 在_proxy中建立模式plproxy;分配权限 grant all on schema plproxy to <用户>。

5 建立pgcluster; 

–以上步骤sql语句: CREATE FUNCTION plpgsql_call_handler () RETURNS language_handler AS ‘/usr/local/pgsql/lib/plpgsql.so’ LANGUAGE C;

CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS
‘/usr/local/pgsql/lib/plpgsql.so’ LANGUAGE C;

CREATE TRUSTED PROCEDURAL LANGUAGE ‘plpgsql’
HANDLER plpgsql_call_handler
VALIDATOR plpgsql_validator;

-——————————————————————-

drop schema if exists plproxy cascade;

create schema plproxy;

grant all on schema plproxy to yahoo;

-——————————————————————-
create or replace function plproxy.get_cluster_version(cluster_name text)

returns integer as $$

begin
if cluster_name = ‘<cluster名字>’ then

return 8;

end if;

raise exception ‘no such cluster: %’, cluster_name;

end; $$ language plpgsql;

-——————————————————————-
create or replace function plproxy.get_cluster_partitions(cluster_name text)

returns setof text as $$

begin

if cluster_name = ‘<cluster名字>’ then

--return next ‘host=202.165.97.144 port=6000 user=chry password=chry dbname=chry_134’;

return next ‘host=pg1.sns.cn3.yahoo.com user=yahoo dbname=sns_search’;
return next ‘host=pg2.sns.cn3.yahoo.com user=yahoo dbname=sns_search’;

return;

end if;

raise exception ‘no such cluster: %’, cluster_name;

end; $$ language plpgsql;

-——————————————————————-
create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text)

returns setof record as $$

begin

key := ‘statement_timeout’;

val := 60;

return next;

return;

end; $$ language plpgsql;

6 建立查询函数

–在_proxy中建立查询函数: CREATE OR REPLACE FUNCTION public.doquery(query text) RETURNS setof record AS $$ CLUSTER ‘<cluster名字>'; RUN ON ALL; $$ LANGUAGE plproxy;

-——————————————————————-
CREATE OR REPLACE FUNCTION public.doquery(urlstr text,query text)
RETURNS setof record AS $$
CLUSTER ‘<cluster名字>';
RUN ON hashtext(urlstr);
$$ LANGUAGE plproxy;

-——————————————————————-
CREATE OR REPLACE FUNCTION public.dmlExec(query text)
RETURNS integer AS $$
CLUSTER ‘<cluster名字>';
RUN ON ALL;
$$ LANGUAGE plproxy;

-——————————————————————-
CREATE OR REPLACE FUNCTION public.dmlExec(urlstr text,query text)
RETURNS integer AS $$
CLUSTER ‘<cluster名字>';
RUN ON hashtext(urlstr);
$$ LANGUAGE plproxy;  

–在所联邦的数据库中建立查询函数: CREATE OR REPLACE FUNCTION public.doquery(query text) RETURNS SETOF RECORD AS $$ DECLARE row RECORD; BEGIN for row in execute query loop return next row; end loop; return; END; $$ LANGUAGE plpgsql;

-—————————————————————
CREATE OR REPLACE FUNCTION public.doquery(urlstr text,query text)
RETURNS SETOF RECORD AS $$
DECLARE
row RECORD;
BEGIN
for row in execute query loop
return next row;
end loop;
return;
END;
$$ LANGUAGE plpgsql;

-—————————————————

CREATE OR REPLACE FUNCTION public.dmlExec(query text)
RETURNS integer AS $$
DECLARE
ret integer;
BEGIN
execute query;

GET DIAGNOSTICS ret = ROW_COUNT;
RETURN ret;

END;
$$ LANGUAGE plpgsql;

-————————————————————–
CREATE OR REPLACE FUNCTION public.dmlExec(urlstr text,query text)
RETURNS integer AS $$
DECLARE
ret integer;
BEGIN
execute query;

GET DIAGNOSTICS ret = ROW_COUNT;
RETURN ret;

END;
$$ LANGUAGE plpgsql;

原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

Posted by 54chen linux

« pgsql如何控制来自其他电脑的连接? PostgreSQL系统安装(Linux) »