diff --git a/bims/api_views/search.py b/bims/api_views/search.py index 5e3b96b20..e56bf31ce 100644 --- a/bims/api_views/search.py +++ b/bims/api_views/search.py @@ -894,7 +894,8 @@ def get_summary_data(self): sites_without_occurrences = LocationSite.objects.exclude( id__in=sites.values('site_id') ).filter( - site_code__icontains=self.search_query + site_code__icontains=self.search_query, + ecosystem_type__in=self.ecosystem_type ).extra( select={ 'name': 'site_code' diff --git a/deployment/Makefile b/deployment/Makefile index c2e978b9b..d5af5d49d 100644 --- a/deployment/Makefile +++ b/deployment/Makefile @@ -49,3 +49,19 @@ reset-search-results: @docker-compose exec dev python /home/web/django_project/manage.py clear_search_results @docker-compose ${ARGS} restart worker @docker-compose ${ARGS} restart cache + + +dbrestore: + @echo + @echo "------------------------------------------------------------------" + @echo "Stopping the database service" + @echo "------------------------------------------------------------------" + @docker-compose ${ARGS} stop db + @echo + @echo "------------------------------------------------------------------" + @echo "Starting the database restoration process" + @echo "------------------------------------------------------------------" + @docker-compose ${ARGS} up -d db-restore + @docker-compose ${ARGS} exec db-restore /restore-db.sh + @docker-compose ${ARGS }stop db-restore + @docker-compose ${ARGS} up -d db diff --git a/deployment/docker-compose.dev.yml b/deployment/docker-compose.dev.yml index a7f9a3ed8..2da37bb33 100644 --- a/deployment/docker-compose.dev.yml +++ b/deployment/docker-compose.dev.yml @@ -77,6 +77,21 @@ services: ports: - "6543:5432" + db-restore: + image: kartoza/postgis:15-3.3 + profiles: + - dev + volumes: + - ./pg/postgres_data:/var/lib/postgresql + - ./backups:/backups + - ./restore-db.sh:/restore-db.sh + - ./revoke.sql:/revoke.sql + environment: + ALLOW_IP_RANGE: 0.0.0.0/0 + POSTGRES_USER: ${POSTGRES_USER:-docker} + POSTGRES_PASS: ${POSTGRES_PASS:-docker} + POSTGRES_DBNAME: ${POSTGRES_DBNAME:-gis} + geoserver: container_name: bims_dev_geoserver image: kartoza/geoserver:2.19.0 diff --git a/deployment/restore-db.sh b/deployment/restore-db.sh new file mode 100755 index 000000000..7bd7ce1a7 --- /dev/null +++ b/deployment/restore-db.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Wait for the PostgreSQL server to start +echo "Waiting for PostgreSQL to start..." +while ! pg_isready -h db-restore -p 5432 -U ${POSTGRES_USER}; do + sleep 1 +done +echo "PostgreSQL started." + +# Revoke connections and terminate backends +su - postgres -c "psql gis -f /revoke.sql" + +# Sleep for a short time to ensure that the sessions are terminated +sleep 2 + +# Drop the database +su - postgres -c "psql -c 'DROP DATABASE IF EXISTS gis;'" + +su - postgres -c "createdb -O docker gis" +su - postgres -c 'pg_restore -d gis /backups/latest.dmp' diff --git a/deployment/revoke.sql b/deployment/revoke.sql new file mode 100644 index 000000000..ae0e78cfe --- /dev/null +++ b/deployment/revoke.sql @@ -0,0 +1,5 @@ +REVOKE CONNECT ON DATABASE gis FROM public; + +SELECT pid, pg_terminate_backend(pid) +FROM pg_stat_activity +WHERE datname = current_database() AND pid <> pg_backend_pid();