Pavlo Golub

PostgreSQL Consultant & Software Developer

Sleeping more conveniently in PostgreSQL

Postgres' sleep functions are not particularly useful, as they should only be utilized for demonstration purposes (like provoking locking situations and then trying to find out who blocked whom). After years of using the pg_sleep() function, which takes seconds as its input argument, I one day discovered that there are more convenient functions that even accept human readable input!

SELECT now();
SELECT pg_sleep_for('5 minutes');
SELECT  /* then do something …. */
SELECT pg_sleep_until('tomorrow 03:00');

More tips and tricks from our very own Kaarel Moppel!

How to turn off test caching for golang!

When testing Golang projects you'll notice that test results are cached for as long as their corresponding source files remain unchanged. This is generally advantageous, unless your test cases behave differently depending on the environment that they are running in, just like our pg_timetable scheduler depends on a PostgreSQL database.

Before Go 1.12 the known solution was to use the GOCACHE=off environment variable, e.g.

$ GOCACHE=off go test ./internal/pgengine -v

However starting from Go 1.12 this leads to the error:

$ GOCACHE=off go test ./internal/pgengine -v
build cache is disabled by GOCACHE=off, but required as of Go 1.12

As a solution one may clear the build cache explicitly before running tests:

$ go clean -cache

Or only clean the test cache:

$ go clean -testcache

Another approach is to use environmental variables:

$ GOFLAGS="-count=1" go test ./internal/pgengine -v

`diff.orderFile`: order your `git diff` output smart!

Working on a project, you might consider that one folder is more important than others. For example, src folder might be more relevant to you as a developer than doc, test, or samples, you name it. Or you may want source files to be listed first, e.g. *.c, *.go...

To order the list of files in git diff output, one may use git's diff.orderFile option.

If you are working with PostgreSQL for example, you may want such an order:


To achieve this:

  • create a file with the proper list, e.g. .gitorderfile
  • run git config diff.orderFile .gitorderfile

You're done!