做点Postgresql笔记


做点Postgresql笔记

没错这时本博主的新坑,而且挖的好辛苦:

  • 如何在对postgis插件各种误操作导致postgis的相关表项被删除后,重新添加postgis插件
    由于是小白,初来乍到,把postgis相关联的表一股脑的误删除了,导致postgresql提供的关于gis的一系列“ST_”(Space Type)功能函数都无法使用,然后就是各种慌张。
    解决方案是:
    1、确认当前pg数据库已经安装有postgis;
    2、如果1成立,重新加载上postgis插件即可,加载方式为:在指定数据库对象的查询中写入以下语句:

    CREATE EXTENSION postgis    

    这里我估计只是装了一个简单的postgis版本,它还有很多丰富的相关扩展我没有装上。只是目前这样操作满足了我现在使用ST函数的要求。如果还有插件缺失,我认为用类似方法可以得到解决。
    3、如果1不成立,那么需要确认是否安装好postgis,没有则需要先安装postgis。

  • 为什么某些表明明有这个字段,点击查询后显示此表不存在此字段
    这一点是我写java查询句柄访问数据库时发生的错误,有关这一点还没有解决,例如我在输入:

select taxiNumber from taxiinfo

时,就会报出错误,表示没有此字段,因此只能暂用:`

select * from taxiinfo

然后再在代码中取结果的不同字段(取我想要的那个字段),这样把结果全部查出的方式应该是降低了代码的执行效率的。

  • 大批量插入数据的优化方法

    主要参考的是德哥的这篇文章,批量插入,最高可达插入 249088 条数据每秒,详见:
    PostgreSQL batch insert performace test

    不知道为啥上面的地址总是挂掉,在此附上“德哥”的github主页,有需者可访问:
    https://github.com/digoal

    我采用了批量插入,且每次批量插入行数为5000条后,对于10GB的数据,原本需要8天,现在1天已经插入一半左右的数据了,因此在这做总结,发现批量插入确实能够提高插入效率,待我稍后检查插入数据是否正确。

    注:下面是我写的代码,此部分可以不看。我采用的是java代码批量插入数据,代码为:

connection c = null;
statement stmt = null;

try{
    Class.forName("org.postgresql.Driver");
    c = DriverManager.getConnection("jdbc:postgresql://...","postgres","password");
    stmt = c.createStatement();
    ...
    String insertsql = "insert into ... values ";
    for(int i:insertListLength-2)
        insertsql += "(insertList[i].attribute1,insertList[i].attribute2,insertList[i].attribute3),...,insertList[i].attributen),";

    insertsql += "(insertList[insertListLength-1].attribute1,insertList[insertListLength-1].attribute2,...,insertList[insertListLength-1].attributen);";
    stmt.executeUpdate(insertsql);
    ...
}catch(Exception e){
    c.rollback();
}finally{
    stmt.close();
    c.close();
}

代码是我怕遗忘进行的记录,可不看。

  • 未完待续

转载自:https://blog.csdn.net/cmsmdn/article/details/52063656

You may also like...