暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TBase应用接入指南(下篇)

1044
版本号--V2.17
更新日期:2019-11-13 

5PHP程序开发

5.1、连接数据库

    <?php     
    $host="172.16.0.29";
    $port="15432";
    $dbname="postgres";
    $user="tbase" ;
    $password="";

    //连接数据库
    $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    if (!$conn){
    $error_msg=@pg_errormessage($conn);
    echo "连接数据库出错,详情:".$error_msg."\n<BR>"; ;
    exit;
    }else{
    echo "连接数据库成功"."\n<BR>";
    }
    //关闭连接
    pg_close($conn);
    ?>

    执行
    [root@VM_0_47_centos test]# curl http://127.0.0.1:8080/dbsta/test/conn.php
    连接数据库成功


    5.2、创建数据表

      <?php
      $host="172.16.0.29";
      $port="15432";
      $dbname="postgres";
      $user="tbase" ;
      $password="";


      //连接数据库
      $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
      if (!$conn){
      $error_msg=@pg_errormessage($conn);
      echo "连接数据库出错,详情:".$error_msg."\n"; ;
      exit;
      }else{
      echo "连接数据库成功"."\n";
      }


      //建立数据表
      $sql="create table public.tbase(id integer,nickname varchar(100)) distribute by shard(id) to group default_group;";
      $result = @pg_exec($conn,$sql) ;
      if (!$result){
      $error_msg=@pg_errormessage($conn);
      echo "创建数据表出错,详情:".$error_msg."\n"; ;
      exit;
      }else{
      echo "创建数据表成功"."\n";
      }
      //关闭连接
      pg_close($conn);
      ?>


      执行


      [root@VM_0_47_centos test]# curl http://127.0.0.1:8080/dbsta/test/createtable.php
      连接数据库成功
      创建数据表成功


      5.3、插入数据

        <?php
        $host="172.16.0.29";
        $port="15432";
        $dbname="postgres";
        $user="tbase" ;
        $password="";


        //连接数据库
        $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
        if (!$conn){
        $error_msg=@pg_errormessage($conn);
        echo "连接数据库出错,详情:".$error_msg."\n"; ;
        exit;
        }else{
        echo "连接数据库成功"."\n";
        }


        //插入数据
        $sql="insert into public.tbase values(1,'tbase'),(2,'pgxz');";
        $result = @pg_exec($conn,$sql) ;
        if (!$result){
        $error_msg=@pg_errormessage($conn);
        echo "插入数据出错,详情:".$error_msg."\n";
        exit;
        }else{
        echo "插入数据成功"."\n";
        }


        //关闭连接
        pg_close($conn);


        ?>


        执行
        [tbase@VM_0_47_centos test]$ curl http://127.0.0.1:8080/dbsta/test/insert.php
        连接数据库成功
        插入数据成功

        5.4、查询数据
          <?php
          $host="172.16.0.29";
          $port="15432";
          $dbname="postgres";
          $user="tbase" ;
          $password="";


          //连接数据库
          $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
          if (!$conn){
          $error_msg=@pg_errormessage($conn);
          echo "连接数据库出错,详情:".$error_msg."\n"; ;
          exit;
          }else{
          echo "连接数据库成功"."\n";
          }


          //查询数据
          $sql="select id,nickname from public.tbase";
          $result = @pg_exec($conn,$sql) ;
          if (!$result){
          $error_msg=@pg_errormessage($conn);
          echo "查询数据出错,详情:".$error_msg."\n";
          exit;
          }else{
          echo "插入数据成功"."\n";
          }
          $record_num = pg_numrows($result);
          echo "返回记录数".$record_num."\n";
          $rec=pg_fetch_all($result);
          for($i=0;$i<$record_num;$i++){
          echo "记录数#".strval($i+1)."\n";
          echo "id:".$rec[$i]["id"]."\n";
          echo "nickname:".$rec[$i]["nickname"]."\n\n";
          }
          //关闭连接
          pg_close($conn);
          ?>


          调用方法
          [root@VM_0_47_centos ~]# curl http://127.0.0.1:8080/dbsta/test/select.php
          连接数据库成功
          插入数据成功
          返回记录数2
          记录数#1
          id:1
          nickname:tbase


          记录数#2
          id:2
          nickname:pgxz


          5.5、流数据copy 入表

            <?php


            $host="172.16.0.29";
            $port="15432";
            $dbname="postgres";
            $user="tbase" ;
            $password="";


            //连接数据库
            $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
            if (!$conn){
            $error_msg=@pg_errormessage($conn);
            echo "连接数据库出错,详情:".$error_msg."\n"; ;
            exit;
            }else{
            echo "连接数据库成功"."\n";
            }
            $row=ARRAY("1,TBase","2,pgxz");
            $flag=pg_copy_from($conn,"public.tbase",$row,",");


            if (!$flag){
            $error_msg=@pg_errormessage($conn);
            echo "copy出错,详情:".$error_msg."\n";
            }else{
            echo "copy成功"."\n";
            }


            //关闭连接
            pg_close($conn);


            ?>


            调用方法
            curl http://127.0.0.1/dbsta/cron/php_copy_from.php
            连接数据库成功
            copy成功

            5.6copy to导出数据到一个数组中
              <?php


              $host="172.16.0.29";
              $port="15432";
              $dbname="postgres";
              $user="tbase" ;
              $password="";


              //连接数据库
              $conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
              if (!$conn){
              $error_msg=@pg_errormessage($conn);
              echo "连接数据库出错,详情:".$error_msg."\n"; ;
              exit;
              }else{
              echo "连接数据库成功"."\n";
              }


              $row=pg_copy_to($conn,"public.tbase",",");
              if (!$row){
              $error_msg=@pg_errormessage($conn);
              echo "copy出错,详情:".$error_msg."\n";
              }else{
              print_r($row);
              }
              //关闭连接
              pg_close($conn);
              ?>




              调用方法
              curl http://127.0.0.1/dbsta/cron/php_copy_to.php
              连接数据库成功
              Array
              (
              [0] => 1,TBase


              [1] => 2,pgxz



              6golang程序开发

              6.1、连接数据库

                package main


                import (
                "fmt"
                "time"


                "github.com/jackc/pgx"
                )


                func main() {
                var error_msg string


                //连接数据库
                conn, err := db_connect()
                if err != nil {
                error_msg = "连接数据库失败,详情:" + err.Error()
                write_log("Error", error_msg)
                return
                }
                //程序运行结束时关闭连接
                defer conn.Close()
                write_log("Log", "连接数据库成功")


                }


                /*
                功能描述:写入日志处理


                参数说明:
                log_level -- 日志级别,只能是是Error或Log
                error_msg -- 日志内容


                返回值说明:无
                */


                func write_log(log_level string, error_msg string) {
                //打印错误信息
                fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
                fmt.Println("日志级别:", log_level)
                fmt.Println("详细信息:", error_msg)
                }


                /*
                功能描述:连接数据库


                参数说明:无


                返回值说明:
                conn *pgx.Conn -- 连接信息
                err error --错误信息


                */


                func db_connect() (conn *pgx.Conn, err error) {
                var config pgx.ConnConfig
                config.Host = "127.0.0.1" 数据库主机host或ip
                config.User = "tbase" 连接用户
                config.Password = "pgsql" 用户密码
                config.Database = "postgres" 连接数据库名
                config.Port = 15432 端口号
                conn, err = pgx.Connect(config)
                return conn, err
                }


                [root@VM_0_29_centos tbase]# go run conn.go
                访问时间:2018-04-03 20:40:28
                日志级别:Log
                详细信息:连接数据库成功


                编译后运行
                [root@VM_0_29_centos tbase]# go build conn.go
                [root@VM_0_29_centos tbase]# ./conn
                访问时间:2018-04-03 20:40:48
                日志级别:Log
                详细信息:连接数据库成功

                6.2、创建数据表
                  package main


                  import (
                  "fmt"
                  "time"


                  "github.com/jackc/pgx"
                  )


                  func main() {
                  var error_msg string
                  var sql string


                  //连接数据库
                  conn, err := db_connect()
                  if err != nil {
                  error_msg = "连接数据库失败,详情:" + err.Error()
                  write_log("Error", error_msg)
                  return
                  }
                  //程序运行结束时关闭连接
                  defer conn.Close()
                  write_log("Log", "连接数据库成功")


                  //建立数据表
                  sql = "create table public.tbase(id varchar(20),nickname varchar(100)) distribute by shard(id) to group default_group;"
                  _, err = conn.Exec(sql)
                  if err != nil {
                  error_msg = "创建数据表失败,详情:" + err.Error()
                  write_log("Error", error_msg)
                  return
                  } else {
                  write_log("Log", "创建数据表成功")
                  }
                  }


                  /*
                  功能描述:写入日志处理


                  参数说明:
                  log_level -- 日志级别,只能是是Error或Log
                  error_msg -- 日志内容


                  返回值说明:无
                  */


                  func write_log(log_level string, error_msg string) {
                  //打印错误信息
                  fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
                  fmt.Println("日志级别:", log_level)
                  fmt.Println("详细信息:", error_msg)
                  }


                  /*
                  功能描述:连接数据库


                  参数说明:无


                  返回值说明:
                  conn *pgx.Conn -- 连接信息
                  err error --错误信息


                  */


                  func db_connect() (conn *pgx.Conn, err error) {
                  var config pgx.ConnConfig
                  config.Host = "127.0.0.1" 数据库主机host或ip
                  config.User = "tbase" 连接用户
                  config.Password = "pgsql" 用户密码
                  config.Database = "postgres" 连接数据库名
                  config.Port = 15432 端口号
                  conn, err = pgx.Connect(config)
                  return conn, err
                  }


                  [root@VM_0_29_centos tbase]# go run createtable.go
                  访问时间:2018-04-03 20:50:24
                  日志级别:Log
                  详细信息:连接数据库成功
                  访问时间:2018-04-03 20:50:24
                  日志级别:Log
                  详细信息:创建数据表成功


                  6.3、插入数据

                    package main


                    import (
                    "fmt"
                    "strings"
                    "time"


                    "github.com/jackc/pgx"
                    )


                    func main() {
                    var error_msg string
                    var sql string
                    var nickname string


                    //连接数据库
                    conn, err := db_connect()
                    if err != nil {
                    error_msg = "连接数据库失败,详情:" + err.Error()
                    write_log("Error", error_msg)
                    return
                    }
                    //程序运行结束时关闭连接
                    defer conn.Close()
                    write_log("Log", "连接数据库成功")


                    //插入数据
                    sql = "insert into public.tbase values('1','tbase'),('2','pgxz');"
                    _, err = conn.Exec(sql)
                    if err != nil {
                    error_msg = "插入数据失败,详情:" + err.Error()
                    write_log("Error", error_msg)
                    return
                    } else {
                    write_log("Log", "插入数据成功")
                    }


                    //绑定变量插入数据,不需要做防注入处理
                    sql = "insert into public.tbase values($1,$2),($1,$3);"
                    _, err = conn.Exec(sql, "3", "postgresql", "postgres")
                    if err != nil {
                    error_msg = "插入数据失败,详情:" + err.Error()
                    write_log("Error", error_msg)
                    return
                    } else {
                    write_log("Log", "插入数据成功")
                    }


                    //拼接sql语句插入数据,需要做防注入处理
                    nickname = "TBase is ' good!"
                    sql = "insert into public.tbase values('1','" + sql_data_encode(nickname) + "')"
                    _, err = conn.Exec(sql)
                    if err != nil {
                    error_msg = "插入数据失败,详情:" + err.Error()
                    write_log("Error", error_msg)
                    return
                    } else {
                    write_log("Log", "插入数据成功")
                    }
                    }


                    /*
                    功能描述:sql查询拼接字符串编码


                    参数说明:
                    str -- 要编码的字符串


                    返回值说明:
                    返回编码过的字符串


                    */


                    func sql_data_encode(str string) string {
                    return strings.Replace(str, "'", "''", -1)
                    }


                    /*
                    功能描述:写入日志处理


                    参数说明:
                    log_level -- 日志级别,只能是是Error或Log
                    error_msg -- 日志内容


                    返回值说明:无
                    */


                    func write_log(log_level string, error_msg string) {
                    //打印错误信息
                    fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
                    fmt.Println("日志级别:", log_level)
                    fmt.Println("详细信息:", error_msg)
                    }


                    /*
                    功能描述:连接数据库


                    参数说明:无


                    返回值说明:
                    conn *pgx.Conn -- 连接信息
                    err error --错误信息


                    */


                    func db_connect() (conn *pgx.Conn, err error) {
                    var config pgx.ConnConfig
                    config.Host = "127.0.0.1" 数据库主机host或ip
                    config.User = "tbase" 连接用户
                    config.Password = "pgsql" 用户密码
                    config.Database = "postgres" 连接数据库名
                    config.Port = 15432 端口号
                    conn, err = pgx.Connect(config)
                    return conn, err
                    }


                    [root@VM_0_29_centos tbase]# go run insert.go
                    访问时间:2018-04-03 21:05:51
                    日志级别:Log
                    详细信息:连接数据库成功
                    访问时间:2018-04-03 21:05:51
                    日志级别:Log
                    详细信息:插入数据成功
                    访问时间:2018-04-03 21:05:51
                    日志级别:Log
                    详细信息:插入数据成功
                    访问时间:2018-04-03 21:05:51
                    日志级别:Log
                    详细信息:插入数据成功


                    6.4、查询数据

                      package main


                      import (
                      "fmt"
                      "strings"
                      "time"


                      "github.com/jackc/pgx"
                      )


                      func main() {
                      var error_msg string
                      var sql string


                      //连接数据库
                      conn, err := db_connect()
                      if err != nil {
                      error_msg = "连接数据库失败,详情:" + err.Error()
                      write_log("Error", error_msg)
                      return
                      }
                      //程序运行结束时关闭连接
                      defer conn.Close()
                      write_log("Log", "连接数据库成功")


                      sql = "SELECT id,nickname FROM public.tbase LIMIT 2"
                      rows, err := conn.Query(sql)
                      if err != nil {
                      error_msg = "查询数据失败,详情:" + err.Error()
                      write_log("Error", error_msg)
                      return
                      } else {
                      write_log("Log", "查询数据成功")
                      }


                      var nickname string
                      var id string


                      for rows.Next() {
                      err = rows.Scan(&id, &nickname)
                      if err != nil {
                      error_msg = "执行查询失败,详情:" + err.Error()
                      write_log("Error", error_msg)
                      return
                      }
                      error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname)
                      write_log("Log", error_msg)
                      }
                      rows.Close()


                      nickname = "tbase"


                      sql = "SELECT id,nickname FROM public.tbase WHERE nickname ='" + sql_data_encode(nickname) + "' "
                      rows, err = conn.Query(sql)
                      if err != nil {
                      error_msg = "查询数据失败,详情:" + err.Error()
                      write_log("Error", error_msg)
                      return
                      } else {
                      write_log("Log", "查询数据成功")
                      }
                      defer rows.Close()


                      for rows.Next() {
                      err = rows.Scan(&id, &nickname)
                      if err != nil {
                      error_msg = "执行查询失败,详情:" + err.Error()
                      write_log("Error", error_msg)
                      return
                      }
                      error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname)
                      write_log("Log", error_msg)
                      }
                      }


                      /*
                      功能描述:sql查询拼接字符串编码


                      参数说明:
                      str -- 要编码的字符串


                      返回值说明:
                      返回编码过的字符串


                      */


                      func sql_data_encode(str string) string {
                      return strings.Replace(str, "'", "''", -1)
                      }


                      /*
                      功能描述:写入日志处理


                      参数说明:
                      log_level -- 日志级别,只能是是Error或Log
                      error_msg -- 日志内容


                      返回值说明:无
                      */


                      func write_log(log_level string, error_msg string) {
                      //打印错误信息
                      fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
                      fmt.Println("日志级别:", log_level)
                      fmt.Println("详细信息:", error_msg)
                      }


                      /*
                      功能描述:连接数据库


                      参数说明:无


                      返回值说明:
                      conn *pgx.Conn -- 连接信息
                      err error --错误信息


                      */


                      func db_connect() (conn *pgx.Conn, err error) {
                      var config pgx.ConnConfig
                      config.Host = "127.0.0.1" //数据库主机host或ip
                      config.User = "tbase" //连接用户
                      config.Password = "pgsql" //用户密码
                      config.Database = "postgres" //连接数据库名
                      config.Port = 15432 //端口号
                      conn, err = pgx.Connect(config)
                      return conn, err
                      }


                      [root@VM_0_29_centos tbase]# go run select.go
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:连接数据库成功
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:查询数据成功
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:id:2 nickname:tbase
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:id:3 nickname:postgresql
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:查询数据成功
                      访问时间:2018-04-09 10:35:50
                      日志级别:Log
                      详细信息:id:1 nickname:tbase


                      6.5、流数据copy from入表 

                        package main


                        import (
                        "fmt"
                        "math/rand"
                        "time"


                        "github.com/jackc/pgx"
                        )


                        func main() {
                        var error_msg string


                        //连接数据库
                        conn, err := db_connect()
                        if err != nil {
                        error_msg = "连接数据库失败,详情:" + err.Error()
                        write_log("Error", error_msg)
                        return
                        }
                        //程序运行结束时关闭连接
                        defer conn.Close()
                        write_log("Log", "连接数据库成功")


                        //构造5000行数据
                        inputRows := [][]interface{}{}
                        var id string
                        var nickname string
                        for i := 0; i < 5000; i++ {
                        id = fmt.Sprintf("%d", rand.Intn(10000))
                        nickname = fmt.Sprintf("%d", rand.Intn(10000))
                        inputRows = append(inputRows, []interface{}{id, nickname})
                        }
                        copyCount, err := conn.CopyFrom(pgx.Identifier{"tbase"}, []string{"id", "nickname"}, pgx.CopyFromRows(inputRows))
                        if err != nil {
                        error_msg = "执行copyFrom失败,详情:" + err.Error()
                        write_log("Error", error_msg)
                        return
                        }
                        if copyCount != len(inputRows) {
                        error_msg = fmt.Sprintf("执行copyFrom失败,copy行数:%d 返回行数为:%d", len(inputRows), copyCount)
                        write_log("Error", error_msg)
                        return
                        } else {
                        error_msg = "Copy 记录成功"
                        write_log("Log", error_msg)
                        }


                        }


                        /*
                        功能描述:写入日志处理


                        参数说明:
                        log_level -- 日志级别,只能是是Error或Log
                        error_msg -- 日志内容


                        返回值说明:无
                        */


                        func write_log(log_level string, error_msg string) {
                        //打印错误信息
                        fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
                        fmt.Println("日志级别:", log_level)
                        fmt.Println("详细信息:", error_msg)
                        }


                        /*
                        功能描述:连接数据库


                        参数说明:无


                        返回值说明:
                        conn *pgx.Conn -- 连接信息
                        err error --错误信息


                        */


                        func db_connect() (conn *pgx.Conn, err error) {
                        var config pgx.ConnConfig
                        config.Host = "127.0.0.1" //数据库主机host或ip
                        config.User = "tbase" //连接用户
                        config.Password = "pgsql" //用户密码
                        config.Database = "postgres" //连接数据库名
                        config.Port = 15432 //端口号
                        conn, err = pgx.Connect(config)
                        return conn, err
                        }


                        [root@VM_0_29_centos tbase]# go run copy_from.go
                        访问时间:2018-04-09 10:36:40
                        日志级别:Log
                        详细信息:连接数据库成功
                        访问时间:2018-04-09 10:36:40
                        日志级别:Log
                        详细信息:Copy 记录成功



                        6.6golang相关资源包

                        需要git的资源包
                        https://github.com/jackc/pgx
                        https://github.com/pkg/errors




                        最后修改时间:2019-12-17 09:26:44
                        文章转载自PostgreSQL中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论