@echo off call :prepare call :restore exit /B 0 :prepare echo Preparing to restore ... set THISDIR_REL=%~dp0 set THISDIR=%THISDIR_REL:~0,-1% set DOCKER_COMPOSE_DIR=%THISDIR% set DATA_DIR=%DOCKER_COMPOSE_DIR%/data exit /B :restore if exist "%DATA_DIR%" ( echo Restore data directory found echo Removing existing data ... docker-compose --project-directory "%DOCKER_COMPOSE_DIR%" down --volumes setlocal ENABLEDELAYEDEXPANSION echo Performing a restore ... endlocal ) else ( echo Restore data directory not found; doing nothing ... ) exit /B :restore_database set CONTAINER_ID=%1 set SQL_SCHEMA_FILENAME=%2 set SQL_DATA_FILENAME=%3 set DB_NAME=%4 set DB_USERNAME=%5 set DISPLAY_NAME=%6 if exist "%DATA_DIR%\%SQL_SCHEMA_FILENAME%" ( echo Restoring the %DISPLAY_NAME% database ... wait_pgdb %CONTAINER_ID% echo SET session_replication_role = 'replica'; > c:\Windows\Temp\db-data.sql type "%DATA_DIR%\%SQL_DATA_FILENAME%" >> c:\Windows\Temp\db-data.sql echo Uploading %DISPLAY_NAME% database schema to Docker container ... docker cp "%DATA_DIR%\%SQL_SCHEMA_FILENAME%" %CONTAINER_ID%:/tmp echo Uploading %DISPLAY_NAME% database data to Docker container ... docker cp c:\Windows\Temp\db-data.sql %CONTAINER_ID%:/tmp del c:\Windows\Temp\db-data.sql echo Restoring %DISPLAY_NAME% database schema ... docker container exec %CONTAINER_ID% psql -U %DB_USERNAME% -f /tmp/%SQL_SCHEMA_FILENAME% %DB_NAME% echo Restoring %DISPLAY_NAME% database data ... docker container exec %CONTAINER_ID% psql -U %DB_USERNAME% -f /tmp/db-data.sql %DB_NAME% ) exit /B :restore_binaryData set CONTAINER_ID=%1 set DATA_DIRECTORY=%2 set CONTAINER_PATH=%3 set DISPLAY_NAME=%4 if exist "%DATA_DIR%\%DATA_DIRECTORY%" ( echo Restoring the %DISPLAY_NAME% binary data ... echo Copying %DISPLAY_NAME% binary data ... docker cp "%DATA_DIR%\%DATA_DIRECTORY%" "%CONTAINER_ID%:%CONTAINER_PATH%" ) exit /B