The day I decided to learn DBext.vim
Tags: vim, productivity, database, tutorial
Published: 2019-09-23 09:49:53

---
title: The day I decided to learn DBext.vim
published: true
description: A quick story about how lazyness can make you miss on great plugins and some quick notes on how to use the said plugin
tags: vim, productivity, database, tutorial 
series: Vim Reviews
---

Feel free to skip over that part and head straight to the hopefully useful content [here](#using-dbext).

Almost a year and a half ago, while I was working at [Repositive](https://repositive.io) (a cool start-up, you should check what they do), I was convinced by mostly 2 of my colleagues to start using vim. 

Soon after, I started a quest for plugins for everything! A part of that quest can be found by looking at the history of my dotfiles repo, you'll see it's a mess. 

At some point during that quest, I thought of looking for a plugin that would allow me to not use things like workbench, robomongo, pgAdmin or even `psql` as I tend to use most after I ditched Atom for nvim. That's when I found this plugin: [DBext.vim](https://github.com/vim-scripts/dbext.vim)

It promised to do all I needed and then some more! awesome! 

Except, I never took the time to learn it properly hence I never used it and continued to hack my way with `psql`. Fast-forward to today, I had to do a bunch of work on our database for my new ticket at [Zeit.io (new website coming soon - in the meantime, if you need something done well give us a call!)](http://zeit.io) and went on looking for the perfect nvim plugin again and ... *wait a minute, I know this plugin!* Yep... I knew it, it was already in my config and had been there for a while... So **this time** I decided to take learn how to use it properly or well enough at least that I would not need to use `psql` anymore and could work from my text editor. 

# Diving in <a name="using-dbext"></a>

The repo's `README.md` sounded a good place as any to start and that 's where I saw that `DBext.vim` provided a nice tutorial, it might be a bit lengthy for some but in short: 

- start by setting up a connection: in my case, I wanted to connect to PSQL by default so I added this to my `.vimrc`

```
let g:dbext_default_profile_PG = 'type=PGSQL:user=postgres:passwd=:host=localhost:port=5432:dbname=@askb'
let g:dbext_default_profile = 'PG'

```

Note the `@askb`, it means that DBext will prompt me to know which database to connect once for each buffer.

- then learn about a few commands that are quite handy: 

  - `<leader>sbp`: if your config isn't right this will allow you to open a quick setup guide. I used it a lot while trying things at first.
  - `<leader>slt`: list the tables in your database.
  - `<leader>st`: show table, probably one of the command I use the most. It allows you to get a really quick overview of a table. Just put your cursor over a table name, type in the mapping and voilà! (If you capitalise the `t`, i.e. `<leader>sT`, DBext will prompt you to know how many rows you'd like to see)
  - `<leader>stw`: Same as above but will ask you for a `WHERE` clause. This is sooo neat!
  - `<leader>sd`: Describe the table instead of listing its content, this is also pretty handy. 

But most importantly the feature I like the most in all of this is that I don't need to be in a SQL or any other database script: I can run all these from anywhere, from my front-end code, from the doc, from a ticket description, ... This allows me to get a quick glance at what the db holds and to get good insights on what it holds for which tables. 


EDIT: since I started writing this post, I've seen the [Tim pope version of this: `vim-dadbod`](https://github.com/tpope/vim-dadbod). I haven't tried it yet, that might wait another year :D but if you've feedback about this plugin or some database recipes to share: please let me know!