You need to have PostgreSQL 13.x with the Postgis extension.
In production, we're currently running 13.3.
brew install postgresql postgis
Get the app from Postgres.app. Install it.
Then to enable the CLI tools, follow the steps from: https://postgresapp.com/documentation/cli-tools.html
# Install Postgres
sudo dnf install postgresql-server postgresql-contrib postgis
# (Optional) Start postgres at boot time
sudo systemctl enable postgresql
# Initialize DB
PGSETUP_INITDB_OPTIONS="-U postgres" sudo postgresql-setup --initdb
Then edit your /var/lib/pgsql/data/pg_hba.conf
. Comment existing lines, and add the following content:
# Allow local connections without password
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Finally start Postgres with sudo systemctl start postgresql
.
If you don't want to run a local instance of PostgreSQL in your computer, you can run one in Docker.
Create and run the container:
docker run -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust -d --name opencollective-postgres postgis/postgis:13-3.1
Set the necessary environment variables:
export PGHOST=localhost
export PGUSER=postgres
You'll also need to have Postgres client tools like psql
, dropdb
, createuser
locally available to run our scripts. In macOS you can install those using Homebrew with:
brew install libpq
echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.bash_profile
For Ubuntu 16.04 and above you can execute the following to install Postgres client tools:
sudo apt-get install postgresql-client
Please be aware of the NODE_ENV
/OC_ENV
variable. By default, it's set to development
and the opencollective_dvl
database will be used.
The development database should be automatically installed after npm install
.
To trigger the postinstall script again, run npm run postinstall
.
To force a restore run npm run db:restore
, then npm run db:migrate
.
Please be aware of the NODE_ENV
/OC_ENV
variable. By default, it's set to development
and the opencollective_dvl
database will be used. You have to set it yourself to test
to switch to the test environment and use opencollective_test
instead.
To setup the database for tests, run npm run db:setup
or run NODE_ENV=test npm run db:setup
to force the environment.
If you want to do the steps manually, first, make sure the opencollective
user is existing:
createuser opencollective
Then:
createdb opencollective_test
psql -d opencollective_test -c 'GRANT ALL PRIVILEGES ON DATABASE opencollective_test TO opencollective'
psql -d opencollective_test -c 'CREATE EXTENSION postgis'
Sometime, things dont't work as expected and you need to start from scratch. Do:
dropdb opencollective_dvl
dropdb opencollective_test
dropuser opencollective
When creating migrations and interacting with the database please follow the guidelines below.
This will create a file in migrations/
where you'll be able to put your migration and rollback procedures:
# The name of the migration should use kebab case
npm run db:migration:create -- --name <name-of-your-migration>
Note: To create a migration, always use the above command, so that it aligns with the default Sequelize file naming conventions.
This will run all the pending migrations in migrations/
:
npm run db:migrate
npm run db:migrate:undo
For development, ensure that local connections do not require a password. Locate your pg_hba.conf
file by running SHOW hba_file;
from the psql prompt (sudo -i -u postgres
+ psql
after clean install). This should look something like /etc/postgresql/9.5/main/pg_hba.conf
. We'll call the parent directory of pg_hba.conf
the $POSTGRES_DATADIR
. cd
to $POSTGRES_DATADIR
, and edit pg_hba.conf
to trust
local socket connections and local IP connections. Restart postgres
- on Mac OS X, there may be restart scripts already in place with brew
, if not use pg_ctl -D $POSTGRES_DATADIR restart
.
Make sure Postgis is available and activated.
Follow the Reset steps and try again.