PostgreSQL (opens new window) is an advanced open source database server.
# Supported versions
- 14 (opens new window)
- 13 (opens new window)
- 12 (opens new window)
- 11 (opens new window)
- 11.1.0 (opens new window)
- 10 (opens new window) (default)
- 10.6.0 (opens new window)
- 9.6 (opens new window)
# Patch versions
Not officially supported!
While we allow users to specify patch versions for this service, they are not officially supported, so if you use one, YMMV.
To use a patch version, you can do something as shown below:
services: myservice: type: postgres:9.6.11
But make sure you use one of the available patch tags (opens new window) for the underlying image we are using.
Here are the configuration options, set to the default values, for this service. If you are unsure about where this goes or what this means, we highly recommend scanning the services documentation to get a good handle on how the magicks work.
Be careful when switching database type, version or credentials!
You should be careful switching database
In the case of type and version, the underlying database files between these things will not be compatible. In the case of credentials, these are set when the container is initially created so in order to change them, you need to
lando destroy && lando start. Note that
lando destroy will delete all the data in your database.
To upgrade the PostgreSQL major version you need to:
- Take a database dump
- Destroy the postgres container
- Change version in
- Restore your database dump
Ignoring this warning can prevent your database from starting
services: myservice: type: postgres:14 portforward: false creds: database: database # Note that you cannot change the below but they are shown here for transparency # You can read more about why this is below # By "NO PASSWORD" we mean the password is blank user: postgres password: NO PASSWORD config: database: SEE BELOW
# Port forwarding
portforward will allow you to access this service externally by assigning a port directly on your host's
localhost. Note that
portforward can be set to either
true or a specific
port but we highly recommend you set it to
true unless you have pretty good knowledge of how port assignment works or you have a very compelling reason for needing a locked down port.
portforward: true will prevent inevitable port collisions and provide greater reliability and stability across Lando apps. That said, one downside of
portforward: true is that Docker will assign a different port every time you restart your application. You can read more about accessing services externally over here.
services: myservice: type: postgres portforward: true
services: myservice: type: postgres portforward: 5432
# Setting custom credentials
The postgres service user is set to
postgres and the password is empty. It does not allow setting a custom user or password as this interferes with tooling commands and build steps. Lando needs to access the postgres super user to perform tooling commands. See the Bitnami documentation (opens new window) for more information.
You can also configure the default
database. However, it is very important to note that these things get set the FIRST TIME YOU START the service and ONLY THE FIRST TIME.
This means that if you change any of the
creds, you need to
lando destroy and then
lando start the service for the changes to take effect. This stands in contrast to the normal
lando rebuild method to change config and is a consequence of persisting the database's data directory between rebuilds.
services: myservice: type: postgres creds: database: database -> db7
lando destroy -y && lando start
Also note that by default, all
postgres services have a passwordless
postgres user with all permissions. DO NOT ALTER THE PASSWORD OF THE POSTGRES USER.
# Using a custom postgres config file
If you do this, you must use a file that exists inside your application and express it relative to your project root as shown below:
A hypothetical project
Note that you can put your configuration files anywhere inside your application directory. We use a
config directory but you can call it whatever you want such as
.lando in the example below:
./ |-- config |-- my-custom.conf |-- .lando.yml
Landofile's postgres config
services: myservice: type: postgres config: database: config/my-custom.conf