`
waiting
  • 浏览: 235059 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

PostgreSQL tips

阅读更多
  1. PHP PDO获取lastInsertId
    PHP手册对于PDO::lastInsertId 函数的注解是
    string PDO::lastInsertId ([ string $name = NULL ] )

    Returns the ID of the last inserted row, or the last value from a sequence object, depending on the underlying driver. For example, PDO_PGSQL() requires you to specify the name of a sequence object for the name parameter
     

    就是说对于pgsql必须指定sequence值,比如

    $val = $dbh->lastInserId('table_id_seq');
     


    如果不指定seq值则得不到正确值。解决办法是使用pgsql对'insert'扩展的语法

    $sql	= "insert into test1 (id, s) values (default, 'a') RETURNING  *";
    $sql2 = "insert into test1 (id, s) values (default, 'a'),  (default, 'b') RETURNING  * ";
    $sql3 = "insert into test1 (s) values ('a'), ('b') RETURNING  id ";
    
    $stmt	= $dbh->query($sql);  // 注意是query而不是exec
    // do错误检查
    
    var_export($stmt->fetch(PDO::FETCH_ASSOC));
    
     第一条sql返回的是整个插入行,第二条返回是最后插入的整行,第三条返回指定的字段


  2. 直接对PDOStatement结果进行迭代

    一般情况我们对query出来的结果需要先fetchAll然后再迭代,比如
    $sql  = 'SELECT * FROM users';
    $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
    // .. do err check
    $res = $stmt->fetchAll();
    if ($res) {
        foreach ($res as $row ) {
            // .. do something
            $uid = $row['userid'];
        }
    }
     
    PHP5的foreach可以对Object进行迭代处理,于是可以这样:
    $sql  = 'SELECT * FROM users';
    $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
    // .. do err check
    foreach ($stmt as $row ) {  // 注意是$stmt 而不是 $stmt->fetchAll()
            // .. do something
            $uid = $row['userid'];
    }
    
    
      并且不用额外判断$stmt的值真,多么的方便


  3. PEAR::MDB2 对 PGSQL BOOL字段兼容性

    mdb2 v1.x版本对于pgsql bool类型字段有兼容问题,获取的值居然是字符串'f'/'t'而不是期望的bool值或者数值0/1。 并且PHP自带的pgsql函数(pg_query())也有同样的问题。
    解决办法就是使用PHP的PDO驱动。PDO_PGSQL可以正确处理bool字段值。


  4. 多列主键索引  
    多列主键顺序与创建 Primary key (col1, col2) 时顺序有关。对col2单独搜索时“=”将会使用主键索引,其他比较操作符将无法使用主键索引;如果同时也对col1进行条件搜索,则对col2使用同样策略无论col1的比较符是什么。所以建表使用多列主键时需要考虑搜索环境来设定主键顺序,以及根据搜索col2的频率考虑是否在col2上建立单独索引。


 

 

 

 

 

 

 

 

 

 

 

.

0
2
分享到:
评论

相关推荐

    PostgreSQL Server Programming 2nd 原版PDF by Dar, Krosing, Mlodgenski & Roybal

    This fascinating guide to server programming will take your skills of PostgreSQL to a whole new level.... It is a step-by-step tutorial, with plenty of tips and tricks to kick-start server programming.

    Learning PostgreSQL 10

    Discover tips on implementing efficient database solutions with PostgreSQL 10 Who This Book Is For If you're interested in learning more about PostgreSQL - one of the most popular relational ...

    sql小tips初步了解

    ### SQL小Tips初步了解 #### 一、SQL基础概述 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它不仅被广泛应用于各种数据库管理系统中,而且是数据处理领域不可或缺的一部分。本文将介绍...

    python-tips-tricks:Python技巧与窍门

    用于分析OLE文件和Microsoft Office文件PySpark -Apache Spark Python API 如何使用PySpark,Postgresql和Docker创建一个简单的ETL作业locallu 设计模式-Python示例目录与智能进度表TQDM一起玩Sweetviz-用于EDA的...

    django-tips:Güttli自以为是的Django Tips

    Güttli的自以为是的Django技巧 如果您不熟悉软件开发 ... 您可以从SQLite开始,但是迟早应该切换到PostgreSQL。 我的提示:不要太深入地研究JavaScript。 它没有大多数人想象的重要。 如何在Django中扩展用户模型?

    PostGIS Essentials(PACKT,2015)

    PostGIS is one of the world's leading spatial databases, created as a geographic extension for PostgreSQL. With it, users are able to manipulate and visualize spatial data incredibly effectively and ...

    Serious Python

    Work with relational databases and effectively manage and stream data with PostgreSQL If you’ve been looking for a way to take your Python skills from good to great, Serious Python will help you ...

    Serious Python 全英文的

    – Work with relational databases and effectively manage and stream data with PostgreSQL If you’ve been looking for a way to take your Python skills from good to great, Serious Python will help you ...

    tech-interview-tips:一个专门讲授技术面试技巧的网站

    技术面试技巧 该网站最初是作为我们的... 为PostgreSQL添加config / database.yml文件 将它们添加到您的〜.bash_profile文件中: export GITHUB_KEY = "Use your own" export GITHUB_SECRET = "Use your own" export

    Tips:该站点用于创建音乐会以及购买这些音乐会的门票

    使用关系型数据库(如MySQL或PostgreSQL)或NoSQL数据库(如MongoDB)都是可行的选择。 4. **搜索功能**:实现一个高效的搜索和过滤功能,让用户可以根据日期、地点、艺术家或票价范围来快速找到合适的音乐会。 5....

    dbvis_windows-x64_9_0_6.zip

    DbVisualizer常见问题解答:http://database.ctocio.com.cn/tips/484/7625484.shtml DbVisualizer是一款涉及到所有主要数据库且基于交叉平台上的援助与维护数据库工具。它允许通过JDBC的驱动同时连接各种不同的...

    dbvis_windows_9_0_6.exe

    DbVisualizer常见问题解答:http://database.ctocio.com.cn/tips/484/7625484.shtml DbVisualizer是一款涉及到所有主要数据库且基于交叉平台上的援助与维护数据库工具。它允许通过JDBC的驱动同时连接各种不同的...

    基于Java的场地污染数据管理与可视化系统源码+项目说明.zip

    postgresql JavaScript、html、css、jsp、bootstrap、jquery cesium # 主要缺陷 界面设计的不好看,后面不会写css,就直接去网上找了个模板 数据库设计比较混乱 前后端没有分离,部分是用jsp写的,不得不说...

    medoo开发文档[收集].pdf

    3. **Tips**: - Medoo提供了很多优化和便捷的特性,例如自动处理SQL注入,内建事务支持,以及对多种数据库类型的支持。开发者应该充分利用这些特性来提高代码的安全性和效率。 4. **PHP PDO扩展列表**: - PDO...

    免费开源的SQL注入工具SQLmap.zip

     访问SQLMAP的官方网站http://www.sqlmap.org可以获得SQLMAP更为详细的介绍,如它的多项特性,最为突出的是SQLMAP完美支持MySQL、Oracle、PostgreSQL、MS-SQL与Access等各种数据库的SQL侦测和注入,同时可以进行六...

    database-plugin:数据库导出导入插件,用于将模型存储在中央数据库存储库中

    Java JDBC(Java Database Connectivity)API使得开发者可以编写与任何提供JDBC驱动的数据库交互的代码,这包括但不限于MySQL、Oracle、PostgreSQL等常见数据库系统。 "archimate"和"archimatetool"标签表明这个...

    Python中防止sql注入的方法详解

    除了使用Python自带的库外,还可以考虑引入第三方库,如`psycopg2`(适用于PostgreSQL)或`pymysql`(适用于MySQL),它们通常提供了更为强大的SQL注入防护功能。 **示例代码**: ```python import pymysql def ...

    bdhospitalZero_Creating_ghi_

    描述中的"usage tips for creating display order 3"则提示我们这个过程可能涉及到排列或排序显示的内容,可能是创建一种新的视图或者排序规则。 在数据库管理中,"ghi"可能代表数据库表、视图、索引、存储过程等...

    不是严肃的JavaScript全栈

    13. **Tips and Tricks**:提示和技巧,可能是作者在开发过程中积累的一些实用小窍门。 14. **Fullstack JavaScript**:全栈JavaScript开发,强调使用JavaScript技术栈完成从前端到后端的开发。 15. **Job Search*...

Global site tag (gtag.js) - Google Analytics