(1)和Oracle类似的dblink功能
使用过oracle的人都知道,oracle有个很先进的功能叫:dblink,能够在一个数据库中操作另外
一个远程的数据库,比如:一个数据库在中国北京,另外一台数据库在中国上海,我可以在北京
这台数据库上面建立一个到上海数据库的dblink,然后可以在北京这台数据库上面对上海的数据库
进行query或者update或者delete。这个先进的功能在PostgreSQL的原代码的:contrib\dblink
中已经有了,大家可以像这样将他编译并安装到我们的数据库中。
#cd contrib/dblink
#make
#make install
假设我们的postgresql安装在:/home/pgsql中。
make install后,在/home/pgsql/lib/中会有一个:dblink.so文件。这就是使用dblink必须的
函数文件。另外,在/home/pgsql/share/contrib中会有一个dblink.sql文件,这就是安装dblink.so
的函数所需要的sql语句。
大家可以像这样安装dblink的所有函数:
#cat dblink.sql|psql
[pgsql@webtrends contrib]$ cat dblink.sql |psql
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE TYPE
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
[pgsql@webtrends contrib]$
说明我们的函数安装成功。
下面可以使用dblink的所有先进功能了。
大家可以先看看dblink.sql中的一些函数申明,让我们更了解他的作用。
######################################################
# viewsql.sh #
# Author:linux_prog #
# use to show all active session's sql in PostgreSQL.#
######################################################
if test -z $1 ;then
echo "Usage:$0 pid"
exit 10
fi
echo "select * from (SELECT pg_stat_get_backend_pid(s.backendid) ASprocpid, pg_stat_get_backend_activity(s.backendid) AS current_queryFROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s) asquerystring where procpid=$1;" | psql
另外,可以提供一个KILL一个session的脚本,比如:有个session占用的资源太多,如果不kill掉他的话,可能会导致系统DOWN机。
killsession.sh:
#!/bin/sh
################################################
# Author:linux_prog #
# use to kill one session. #
################################################
if test -z $1; then
echo "Usage:$0 pid"
exit 10
fi
刚才那个很占资源的session的目前的SQL操作就被cancel掉了。
在3665的psql中会显示:
pgsql=# insert into access_log select * from access_log ;
ERROR: canceling query due to user request