go+postgresql服务器

  1 func AddGroup(w http.ResponseWriter, req *http.Request) {
  2
  3     outputReq(req)
  4
  5     responseJson := map[string]interface{}{jsonKeyMessage: "", jsonKeyResult: nil}
  6
  7     initResponse(w)
  8     err := req.ParseForm()
  9     if err != nil {
 10         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
 11         return
 12     }
 13
 14     nickname := toString(req.Form["nickname"])
 15     delete(req.Form, "nickname")
 16     icon := toString(req.Form["icon"])
 17     delete(req.Form, "icon")
 18
 19     requestJson := initRequestJson(req.Form)
 20     customInfo, err := json.Marshal(requestJson)
 21     if err != nil {
 22         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
 23         return
 24     }
 25
 26     db, err := openSql()
 27     defer db.Close()
 28     if err != nil {
 29         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
 30         return
 31     }
 32
 33     tx, err := db.Begin()
 34     if err != nil {
 35         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
 36         return
 37     }
 38
 39     stmt, err := tx.Prepare(`
 40     insert into objects(nickname,icon,custom,isUser)
 41     values ($1,$2,$3,false) returning id
 42     `)
 43     if err != nil {
 44         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
 45         return
 46     }
 47
 48     rows, err := stmt.Query(nickname, icon, customInfo)
 49     if err != nil {
 50         errString := err.Error() + " " + errorString(tx.Rollback())
 51         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 52         return
 53     }
 54
 55     if !rows.Next() {
 56         errString := "add group failed! " + errorString(tx.Rollback())
 57         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 58         return
 59     }
 60
 61     var groupID int64
 62     err = rows.Scan(&groupID)
 63     ///fmt.Println("groupID:", +groupID)
 64     if err != nil {
 65         errString := err.Error() + " " + errorString(tx.Rollback())
 66         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 67         return
 68     }
 69
 70     err = rows.Close()
 71     if err != nil {
 72         errString := err.Error() + " " + errorString(tx.Rollback())
 73         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 74         return
 75     }
 76     err = stmt.Close()
 77     if err != nil {
 78         errString := err.Error() + " " + errorString(tx.Rollback())
 79         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 80         return
 81     }
 82     stmt, err = tx.Prepare("insert into groups(id,createTime) values($1,now())")
 83     defer stmt.Close()
 84     if err != nil {
 85         errString := err.Error() + " " + errorString(tx.Rollback())
 86         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 87         return
 88     }
 89
 90     result, err := stmt.Exec(groupID)
 91     //rows1, err := tx.Exec("insert into groups(id,createTime) values(‘" + fmt.Sprint(groupID) + "‘,now())")
 92     if err != nil {
 93         errString := err.Error() + " " + errorString(tx.Rollback())
 94         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
 95         return
 96     }
 97
 98     affect, err := result.RowsAffected()
 99     if err != nil {
100         errString := err.Error() + " " + errorString(tx.Rollback())
101         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
102         return
103     }
104     if affect != 1 {
105         errString := "add group failed! " + errorString(tx.Rollback())
106         writeResponse(errString, responseJson, w, http.StatusInternalServerError)
107         return
108     }
109
110     _, err = tx.Exec("commit")
111     if err != nil {
112         writeResponse(err.Error(), responseJson, w, http.StatusInternalServerError)
113         return
114     }
115     responseJson[jsonKeyResult] = fmt.Sprint(groupID)
116     writeResponse("success", responseJson, w, http.StatusOK)
117 }

postgresql事务

时间: 2024-10-12 06:19:40

go+postgresql服务器的相关文章

将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器

阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级,被迫无奈下只能改用自己用阿里云ECS搭建的PostgreSQL服务器.这篇随笔记录一下数据库迁移的主要步骤. 在ubuntu时安装好PostgreSQL之后,首先进入 /etc/postgresql/9.6/main 修改2个配置文件: postgresql.conf listen_addresse

postgresql服务器的启动

当postgres服务器没有启动时,psql命令会报错: psql: 无法联接到服务器: 没有那个文件或目录 服务器是否在本地运行并且在 Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432"上准备接受联接? 解决办法: 通过命令 /etc/init.d/postgresql start 启动postgres服务器. 收到信息 [ ok ] Starting postgresql (via systemctl): postgresql.service

检查所有PostgreSQL服务器所有数据库schema下所有表大小并统一整理到MySQL数据库中

目前开发环境共有40台左右PostgreSQL数据库服务器,现在将这些数据库服务器所有数据库的所有schema由脚本统一收集并写入MySQL数据库中,可以做个定时任务,每隔一段时间运行一次,实时收集数据 在MySQL数据库中创建元数据表 mysql> desc t_postgres_instance; +-------------------+--------------------------------------+------+-----+-------------------+-----

PostgreSQL系列一:PostgreSQL简介与安装

一.PostgreSQL简介 1.1 PostgreSQL概述 PostgreSQL数据库是目前功能最强大的开源数据库,支持丰富的数据类型(如JSON和JSONB类型.数组类型)和自定义类型.而且它提供了丰富的接口,可以很容易地扩展它的功能,如可以在GiST框架下实现自己的索引类型等,它还支持使用C语言写自定义函数.触发器,也支持使用流行的语言写自定义函数,比如其中的PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python.PL/Tcl,等等. 1.2 PostgreS

PostgreSQL即学即用(第2版)pdf

下载地址: 网盘下载 内容简介 · · · · · · 本书将帮助你理解和使用PostgreSQL 这一开源数据库系统.你不仅会学到版本9.2.9.3 和9.4中的企业级特性,还会发现PostgreSQL 不只是个数据库系统,也是一个出色的应用平台.本书通过示例展示了如何实现在其他数据库中难以或无法完成的任务.这一版内容覆盖了LATERAL 查询.增强的JSON 支持.物化视图和其他关键话题. 作者简介  · · · · · · Regina Obe 是数据库咨询公司Paragon的负责人之一,

Postgresql学习笔记(二)配置文件

1.配置文件 配置文件控制着一个PostgreSQL服务器实例的基本行为,主要包含postgresql.conf.pg_hba.conf.pg_ident.conf (1)postgresql.conf 该文件包含一些通用设置,比如内存分配,新建database的默认存储位置,PostgreSQL服务器的IP地址,日志的位置以及许多其他设置.9.4版引入了 一个新的postgresql.auto.conf文件,任何时候执行Altersystem SQL命令,都会创建或重写该文件.该文件中的设置会

PostgreSQL体系基本概念

理解 PostgreSQL 的组件之间的相互关系将会使本节显得更清晰一些. 按照数据库术语来说,PostgreSQL 使用一种客户端/服务器的模式.一次 PostgreSQL 会话由下列相关的进程(程序)组成: 一个服务器进程,它管理数据库文件,接受来自客户端应用与数据库的连接,并且代表客户端在数据库上执行操作.数据库服务器程序叫 postgres . 那些需要执行数据库操作的用户的客户端(前端)应用.客户端应用可能本身就是多种多样的:它们可以是一个字符界面的工具,也可以是一个图形界面的应用,或

PostgreSQL创建一个数据库

看看你能否访问数据库服务器的第一个例子就是试着创建一个数据库.一台运行着的 PostgreSQL 服务器可以管理许多数据库.通常我们会为每个项目和每个用户单独使用一个数据库. 节点管理员可能已经为你创建了可以使用的数据库.他应该已经告诉你这个数据库的名字.如果这样你就可以省略这一步,并且跳到下一节. 要创建一个新的数据库(在我们这个例子里叫 mydb),你可以使用下面的命令: $ createdb mydb 它应该生成下面这样的响应: CREATE DATABASE 如果这样,那么这一步就成功了

Postgresql流复制+pgpool实现高可用

pgpool 概述 pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件,它提供以下功能:连接池.复制.负载均衡.限制超过限度的连接以及并行查询.文档在此. 四种模式 O 意味着“可用”, X 意味着“不可用(1) 并行查询模式需要同时打开复制和负载均衡,但是复制和负载均衡无法用于并行查询模式中的分布式表.(2) 在线恢复可以和流复制同时使用.(*3) 客户端仅仅是通过 pgpool-II 连接到 PostgreSQL服务器.这种模式仅仅