
1创建外部表定义:使用CREATE FOREIGN TABLE语句创建外部表定义,指定数据源和列名等信息。例如,以下是连接到CSV文件的外部表定义示例:
CREATE FOREIGN TABLE csv_table (
id int,
name text,
age int
)
SERVER csv_server
OPTIONS (
filename '/path/to/csv/filecsv',
format 'csv',
header 'true'
);
2执行查询:使用SELECT语句执行查询,如下所示:
SELECT FROM csv_table WHERE name LIKE 'J%';
在此示例中,我们将根据名字以J开头的行过滤结果。
注意:要执行LIKE查询,需要确保外部数据源支持该 *** 作。postgresql默认情况下,远程访问不能成功,如果需要允许远程访问,需要修改两个配置文件,说明如下:
1postgresqlconf
将该文件中的listen_addresses项值设定为“”,在90 Windows版中,该项配置已经是“”无需修改。
2pg_hbaconf
在该配置文件的host all all 127001/32 md5行下添加以下配置,或者直接将这一行修改为以下配置
host all all 0000/0 md5
如果不希望允许所有IP远程访问,则可以将上述配置项中的0000设定为特定的IP值。一、背景介绍:
本文所述PostgreSQL服务端运行在RedHat Linux上,IP为:192168230128
客户端安装在Windows XP上, IP为:1921682301
二、配置方法:
1修改服务端/opt/postgresql/data/postgresqlconf文件,将:
#listen_address='localhost'
改成
listen_address=''
2修改/opt/postgresql/data/gp_hbaconf文件:
在其中增加客户端的ip,如下,注意最后一行:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127001/32 trust
# IPv6 local connections:
host all all ::1/128 trust
#kevin add
# IPv4 local connections:
host all all 1921682301/32 trust
3重启PG服务:
[postgres@localhost data]$ pg_ctl restart
waiting for server to shut downLOG: received smart shutdown request
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
done
server stopped
server starting
[postgres@localhost data]$ LOG: database system was shut down at 2011-07-09 14:54:29 CST
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
[postgres@localhost data]$
4 使用客户端连接,配置如下:
5点击“确定”进行连接。
但前提是要设置密码文件。当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如
1
$sudo-upostgrespsql
或
1
2
$sudosu-postgres
$psql
但是对于没有系统账户对应的数据库角色,如要使用脚本登录则必须使用PostgreSQL密码文件
heredoc方式
heredoc是一种很常用的方式,在bash环境下还可以使用变量替换,用法示例
1
2
3
psql-U${role}-h${host}-dmydb
CREATESCHEMA${role};
EOF
也可以在循环语句中,向数据库批量插入数据,类似
1
2
3
4
5
6
for
do
psql-U${role}-h${host}-dmydb
INSERTINTO${table}VALUES(${value1},${value2},);
EOF
done
但这种方式,每次插入一条语句都重新登录一次数据库,效率肯定不咋地。
UPDATE(05/05/2014):既然可以使用变量替换,可以将所有插入语句组合到一个变量中,然后就可以在一次登录中批量插入数据了。
还可以用以下方式来获取查询结果
result=`psql-Urole-hlocalhost-dmydb
SELECTFROMprocts;
EOF`
echo${result}
使用psql命令行选项-f执行sql脚本文件
1
psql-U${role}-h${host}-dmydb-f${scriptname}
使用psql命令行选项-c执行SQL语句或psql命令
psql的-c选项可以指定SQL语句或者psql命令,但二者不能混合,除非使用管道。如果命令参数中有多条SQL语句,则它们在一个事务里执行,除非使用BEGIN/COMMIT明确的指定事务。这与交互式使用psql终端不同,如果不明确指定事务,则每条SQL属于一个单独的事务并自动提交。只有最后一条SQL语句的结果被返回。
是的。pg数据库支持集群间数据同步的。实现数据库集群同步的原理简述:是采用一主多从式集群方式,通过在主服务器和从服务器上建立同步节点,设置远程访问路径,启动监听进程进行监听,当主服务器进行了修改 *** 作时,通过触发器触发,从进程进行异步修改来达到数据库同步。SQL SERVER连接oracle数据库几种方法
--1 方式
--查询oracle数据库中的表
SELECT
FROM OPENDATASOURCE(
'MSDAORA',
'Data Source=GE160;User ID=DAIMIN;Password=DAIMIN'
)DAIMINJOBS
--在sqlserver中创建与oracle数据库中的表同名的表
select into JOBS from
OPENDATASOURCE(
'MSDAORA',
'Data Source=GE160;User
ID=daimin;Password=daimin'
)DAIMINJOBS
select from JOBS
--2、方式
--在master数据库中查看已经存在的链接服务器
select from sysservers
EXEC sp_addlinkedserver
@server = 'GE160',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'GE160'
exec sp_addlinkedsrvlogin 'GE160', false, 'sa', 'daimin', 'daimin'
--要在企业管理器内指定登录帐号
exec sp_dropserver GE160
select from GE160DAIMINJOBS
delete from GE160DAIMINJOBS
--备注:引用ORACLE服务器上的表时,用户名称与表名一定要大写字母。
SELECT
FROM OPENQUERY(GE160, 'SELECT FROM DAIMINJOBS')
--3、方式
SELECT a
FROM OPENROWSET('MSDAORA',
'GE160';'DAIMIN';'DAIMIN',
DAIMINJOBS) AS a
ORDER BY aJOB_ID
--4、方式 ODBC
--ODBC方式比较好办
SELECT A
FROM
OPENROWSET('MSDAORA','GE160';'DAIMIN';'DAIMIN', --GE160是数据源名
DAIMINJOBS) AS
A
ORDER BY AJOB_ID
跨数据库使用比较简单,如ceshi数据库想使用Finance2014的A表,则使用SELECT FROM Finance2014dboA
跨服务器的使用,相对复杂一些 需要先连接服务器
EXEC sp_addlinkedserver 'srv_lnk','','SQLOLEDB','1921682249'EXEC sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','12345'
再设置保证存储过程能够使用
EXEC sp_serveroption @server='srv_lnk',@optname='rpc',@optvalue='TRUE'EXEC sp_serveroption @server='srv_lnk',@optname='rpc out',@optvalue='TRUE'
4再跨服务器调用数据库表和存储过程如:
SELECT FROM srv_lnkAdboB 其中A为数据库B为表
EXEC srv_lnkAdboB 其中A为数据库B为存储过程
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)