} catch(ClassNotFoundException e){ e.printStackTrace(); } catch(SQLException e){ e.printStackTrace(); } } 以上代码红色部分若用“localhost”则可连接成功,若改为本机的IP地址,则发生下面错误:org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:123) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:124) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30) at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24) at org.postgresql.Driver.makeConnection(Driver.java:386) at org.postgresql.Driver.connect(Driver.java:260) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at operator.DataOperater.getConnection(DataOperater.java:23) at operator.DataOperater.select(DataOperater.java:48) at operator.TestConnectData.main(TestConnectData.java:17) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at org.postgresql.core.PGStream.<init>(PGStream.java:62) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77) ... 11 more 我不知道怎么回事,或许我用错了,请求大家帮忙,到底应该如何用java去连接阿?
一直都在从事数据库性能测试方面的工作,遇到过各种各样的性能问题。深感若没有SQL执行信息,数据库性能分析便无从谈起。 利用业余时间修改了Postgres8.3.3的源代码,在其中加入了统计SQL执行信息的功能。它可以显示每条 SQL 语句的执行次数、执行时间、消耗的CPU时间、读cache次数、命中cache 次数。 它可以帮你找到执行时间最长,消耗资源最多的SQL。对于事务处理,如果一条SQL语句在执行时读cache的次数达到了2000以上,极有可能是优化器产生的执行计划太差, 如果你在使用potgres时遇到性能问题,不妨使用一下。压缩后的软件包大约有5M,需要的朋友可以给我发邮件[email protected],我会发给你,是一个完整的postgres软件包, 直接解开便可使用。 现在只有Linux 32位版的, 没有做windows版的,精力实在有限。 基于的postgres的版本是8.3.3, 使用旧版本的需要升级。只需要用psql连上数据库,输入命令"dump sql_stats;" 或 "dump sql_stats reset;", 所有SQL语句的执行信息便会被写到一个数据文件中,该数据文件位于子目录sql_dump下面。 假定你的数据库位于目录/home/postgres/database 下,那么你可以在/home/postgres/database/sql_dump下找到该数据文件。 该数据文件的名字以sql_dump打头,后面是文件建立的时间, 如sql_dump_2008_09_24_12_42_25 表示该文件是2008年9月24日12点42分45秒创建的。如果是第一次执行dump sql_stats,它将会将所有的从数据库启动到执行该命令期间运行的 SQL语句的信息导出到外部文件中,否则,它将会将所有的从上次执行dump sql_stats reset命令到本次执行该命令期间运行的SQL语句的信息导出到外部文件中。如果在Linux 下查看该文件,LANG环境变量应设为zh_CN.gb1803(我用的是openSuse 11)。 下面是我的机器上的一个数据文件实例, 其中含有两条SQL语句的执行信息: yan@yan:/home/postgres_bin/database/sql_dump> more sql_dump_2008_09_24_12_42_25 ------------------------------------------------------------------------------------------------- 第1条SQL drop table pxtest1 ;执行次数:1读cache次数:103 命中cache次数:103 执行时间: 1661.000000 消耗的CPU时间:0.000000平均读cache次数:103 平均命中cache次数:103 平均执行时间: 1661.000000 平均消耗的CPU时间:0.000000 ------------------------------------------------------------------------------------------------- 第2条SQL select * from foo where id in ( select id2 from ( select id1 , id2 from bar union select id1 , id2 from bar ) as s ) ;执行次数:1读cache次数:0 命中cache次数:0 执行时间: 342.000000 消耗的CPU时间:0.000000平均读cache次数:0 平均命中cache次数:0 平均执行时间: 342.000000 平均消耗的CPU时间:0.000000 ------------------------------------------------------------------------------------------------- 以第一条SQL为例,第一行显示的是具体的SQL语句,第二行显示的是该语句的执行次数, 第三行显示的是这条语句执行时总的读cache次数、总的命中cache次数、总的执行时间和总的CPU时间。 第四行显示的是平均每次执行的读cache次数、命中cache次数、执行时间和消耗的CPU时间,实际上就是用第三行的值除以SQL语句的执行次数得来的。注意执行时间和CPU时间的单位是0.000001秒,即微秒。 dump sql_stats 与 dump sql_stats reset的区别在于,加上reset以后,所有SQL执行统计信息在被导出到外部文件中后,数据库将会清除掉这些信息,重新开始统计。没有加reset,则所有 SQL执行统计信息在被导出到外部文件中后,还会继续保存在数据库中。另外,该工具在统计SQL执行信息时,会对SQL语句进行一定的变换, 如果SQL语句中含有数据或字符型等常量,这些常量将会被变换成$1,$2, ..., $n。例如: select * from test where size > 100 将会被变换成 select * from test where size > $1, 同样 select * from test where size > 200 也会被变换成 select * from test where size > $1。所以这两条语句的的执行信息会被合并到一起, 作为一条语句来处理。再举一个例子, select * from test where size > 100 and size < 200 会被变换成 select * from test where size > $1 and size < $2, 所以它与上面两条语句是 不同的,将会作为一条新的语句来收集统计信息。
海军那。
老金现在还是对MYSQL兴趣很大的。
^_^
公司只能在公共上网机上网,蛮郁闷的
postgre现在推广最大的难题就是资料少
中文社区里也是这样
我做的程序是c++ + libpq在c api上封装了一下,解决方法
是每次执行语句时候,将postgre里的client_code设置成为utf-8模式,然后利用windows api 进行了一次字符的编码转换(这个网上很多)
最后发现,就算数据库是 sql_ascii的,client_code的在utf-8模式下是可以插入的,sql语句也是utf-8编码模式
但如果数据库是utf-8,我的sql语句不是utf-8模式,是绝对不能插入。
我想这和utf-8本身有关。它是一个国际编码。可以识别多种,但其他编码并不一定能识别utf-8
多,有没有系统对比一下这两个数据库的资料?
我主要用postgre+postgis,处理地理数据
用的比较多的空间sql
使用了一段世界POSTGRESQL的了,也没碰到什么问题。
这次终于有机会用上了 ,哈哈
研究POSTGIS中
下面代码:
public static void main(String args[])
{
try
{
Class.forName( "org.postgresql.Driver" );
String url = " jdbc:postgresql://172.17.97.171:5432/mydb" ;
Connection con = DriverManager.getConnection(url, "xuhongling" , "redling" );
Statement st = con.createStatement();
//String sql1="insert into weather values ('nanjing','30','60','1.210000','2007/12/21')";
String sql2 = " select * from weather " ;
//int rs1 = st.executeUpdate(sql1);
//String sql3="delete from weather where city='nanjing'";
//st.executeUpdate(sql3);
String sql4="update weather set date='2008/8/8' where city='nanjing' ";
st.executeUpdate(sql4);
ResultSet rs = st.executeQuery(sql2);
while (rs.next())
{
System.out.print(rs.getString(1)+" |");
System.out.print(rs.getString(2)+" |");
System.out.print(rs.getString(3)+" |");
System.out.print(rs.getString(4)+" |");
System.out.println(rs.getString(5)+" |");
}
rs.close();
st.close();
con.close();
// System.out.print("insert into sucess!"+rs);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
} }
以上代码红色部分若用“localhost”则可连接成功,若改为本机的IP地址,则发生下面错误:org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:123)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:124)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:386)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at operator.DataOperater.getConnection(DataOperater.java:23)
at operator.DataOperater.select(DataOperater.java:48)
at operator.TestConnectData.main(TestConnectData.java:17)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at org.postgresql.core.PGStream.<init>(PGStream.java:62)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77)
... 11 more
我不知道怎么回事,或许我用错了,请求大家帮忙,到底应该如何用java去连接阿?
如果正在使用其他数据库产品,学习PostgreSQL的过程中,你会时常发现那些数据库产品中的某些概念原来是这么来的。
host all all 172.0.0.0/8 trust
再试试
selinux限制了?
它可以帮你找到执行时间最长,消耗资源最多的SQL。对于事务处理,如果一条SQL语句在执行时读cache的次数达到了2000以上,极有可能是优化器产生的执行计划太差,
如果你在使用potgres时遇到性能问题,不妨使用一下。压缩后的软件包大约有5M,需要的朋友可以给我发邮件[email protected],我会发给你,是一个完整的postgres软件包, 直接解开便可使用。 现在只有Linux 32位版的, 没有做windows版的,精力实在有限。
基于的postgres的版本是8.3.3, 使用旧版本的需要升级。只需要用psql连上数据库,输入命令"dump sql_stats;" 或 "dump sql_stats reset;", 所有SQL语句的执行信息便会被写到一个数据文件中,该数据文件位于子目录sql_dump下面。
假定你的数据库位于目录/home/postgres/database 下,那么你可以在/home/postgres/database/sql_dump下找到该数据文件。 该数据文件的名字以sql_dump打头,后面是文件建立的时间,
如sql_dump_2008_09_24_12_42_25 表示该文件是2008年9月24日12点42分45秒创建的。如果是第一次执行dump sql_stats,它将会将所有的从数据库启动到执行该命令期间运行的
SQL语句的信息导出到外部文件中,否则,它将会将所有的从上次执行dump sql_stats reset命令到本次执行该命令期间运行的SQL语句的信息导出到外部文件中。如果在Linux
下查看该文件,LANG环境变量应设为zh_CN.gb1803(我用的是openSuse 11)。
下面是我的机器上的一个数据文件实例, 其中含有两条SQL语句的执行信息:
yan@yan:/home/postgres_bin/database/sql_dump> more sql_dump_2008_09_24_12_42_25
-------------------------------------------------------------------------------------------------
第1条SQL
drop table pxtest1 ;执行次数:1读cache次数:103 命中cache次数:103 执行时间: 1661.000000 消耗的CPU时间:0.000000平均读cache次数:103 平均命中cache次数:103 平均执行时间: 1661.000000 平均消耗的CPU时间:0.000000
-------------------------------------------------------------------------------------------------
第2条SQL
select * from foo where id in ( select id2 from ( select id1 , id2 from bar union select id1 , id2 from bar ) as s ) ;执行次数:1读cache次数:0 命中cache次数:0 执行时间: 342.000000 消耗的CPU时间:0.000000平均读cache次数:0 平均命中cache次数:0 平均执行时间: 342.000000 平均消耗的CPU时间:0.000000
-------------------------------------------------------------------------------------------------
以第一条SQL为例,第一行显示的是具体的SQL语句,第二行显示的是该语句的执行次数, 第三行显示的是这条语句执行时总的读cache次数、总的命中cache次数、总的执行时间和总的CPU时间。
第四行显示的是平均每次执行的读cache次数、命中cache次数、执行时间和消耗的CPU时间,实际上就是用第三行的值除以SQL语句的执行次数得来的。注意执行时间和CPU时间的单位是0.000001秒,即微秒。
dump sql_stats 与 dump sql_stats reset的区别在于,加上reset以后,所有SQL执行统计信息在被导出到外部文件中后,数据库将会清除掉这些信息,重新开始统计。没有加reset,则所有
SQL执行统计信息在被导出到外部文件中后,还会继续保存在数据库中。另外,该工具在统计SQL执行信息时,会对SQL语句进行一定的变换, 如果SQL语句中含有数据或字符型等常量,这些常量将会被变换成$1,$2, ..., $n。例如: select * from test where size > 100 将会被变换成 select * from test where size > $1, 同样 select * from test where size > 200
也会被变换成 select * from test where size > $1。所以这两条语句的的执行信息会被合并到一起, 作为一条语句来处理。再举一个例子,
select * from test where size > 100 and size < 200 会被变换成 select * from test where size > $1 and size < $2, 所以它与上面两条语句是
不同的,将会作为一条新的语句来收集统计信息。
现在这个相当的火呢
《数据库系统概念》是本不错的数据库基础的书吧,它的新版本(版本5)已经把postgres提出来有针对性的介绍了一些了呢
而且postgres又是很接近oracle的开放源代码的数据库,所以对于学习研究还是很不错的
不过我还相当的不了解呢……所以,会经常来这里看看,听听大牛人的指点!
谢谢各位了哦