You need to have PostgreSQL > 16.x.
Simply run on of these:
# With docker-compose
docker-compose -f docker-compose/db.yml up
# With podman
podman-compose -f docker-compose/db.yml up # Only start the DBbrew install postgresql
Then:
createuser -s postgres -U <os-username>
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
# (Optional) Start postgres at boot time
sudo systemctl enable postgresql
# Initialize DB
PGSETUP_INITDB_OPTIONS="-U postgres" sudo postgresql-setup --initdbThen 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 --shm-size=1g --memory=4g --cpus=2 -v opencollective-postgres-data:/var/lib/postgresql/data postgres:16
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'
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.