Mohit Khare
Mohit Khare Product Engineer @ gojek | Blogs about tech, productivity and life.

Transactions on Postgres in Golang

Transactions on Postgres in Golang

In this article, I will be discussing how to execute DB operations on Postgres in Golang.

Databases are basic components of any application. Recently building applications in Golang, I too had the use case to persist data and perform queries on it.

Starting with the Basics ✅

I’ll be using GORM library here. If you are using pq, make required modifications but the concept will remain the same.

Let’s first create a DB module and set up our own PostgresStore to increase readability and access only those methods which we need. You can anytime add/remove as per your need.

I have added the following operations — 

  • DB() — which is our Postgres DB instance
  • Begin() — which starts a transaction block
  • Commit() — commits the current transaction
  • Rollback() — abort the current transaction
  • Close() — closes the cursor ( Read more here)

Rest is just the implementation of these methods. Please refer to the code below.

Now, once we have done our setup. Do set up your basic table with some data. I created a user table with id,name and gender columns. Let’s do a simple SELECT query on it — 

Congrats, you just performed a DB operation. You can do all kinds of SQL magic here 😉

Let’s do some Transactions 💰

For those who are not aware of what Transaction means in database. I’ll recommend reading about it first.

What are DB Transactions?

A database transaction is a single unit of work that may consist of one or more operations. A transaction in a database system must maintain the ACID properties.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

Read awesome geeksforgeeks article here.

Now let’s implement transactions to make our concepts solid.
Note: I’ll recommend to always code out the concepts you learn. It lets you understand the topic better.

A transaction will consist of the following stages —

Same stages in Golang would be like this — 

Transactions are highly useful and recommended since they maintain ACID properties. Also, in the case of bulk queries, you can execute let’s say multiple execute queries. But commit only once. This reduces the time taken to execute that bulk operation. Otherwise, each query would commit and increase the overall time.

Try experimenting and clocking the time taken with and without a transaction. Now, get back to your codebases and implement transactions if you were not till now 😊


Follow if interested in more technology-oriented stuff. I hope you learned something interesting and new.

I share updates/knowledge almost daily on Twitter. Reach out to me mohitkhare.me

comments powered by Disqus