How To

Create a database if not exists in PostgreSQL

Unlike MySQL et al., PostgreSQL does not support the CREATE ... IF NOT EXISTS syntax for databases. This can be, however, simulate in psql with the \gexec parameter.

SELECT 'CREATE DATABASE <your db name>'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '<your db name>')\gexec

\gexec sends the current query buffer to the server, then treats each column of each row of the query's output (if any) as a SQL statement to be executed. \gexec cannot be used with the -c option in psql.

Another alternative that is convenient for shell scripts:

psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = '<your db name>'" | grep -q 1 | psql -U postgres -c "CREATE DATABASE <your db name>"