PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

docker-compose restart postgres po uruchomieniu skryptów w docker-entrypoint-initdb.d

Mówiąc prościej, dzieje się to celowo; autor robi to w ramach inicjalizacji.

Wygląda na to, że niektóre odpowiedzi można znaleźć w skrypcie powłoki punktu wejścia obrazu:

_main() {
    # if first arg looks like a flag, assume we want to run postgres server
    if [ "${1:0:1}" = '-' ]; then
        set -- postgres "[email protected]"
    fi

    if [ "$1" = 'postgres' ] && ! _pg_want_help "[email protected]"; then
        docker_setup_env
        # setup data directories and permissions (when run as root)
        docker_create_db_directories
        if [ "$(id -u)" = '0' ]; then
            # then restart script as postgres user
            exec gosu postgres "$BASH_SOURCE" "[email protected]"
        fi

        # only run initialization on an empty data directory
        if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
            docker_verify_minimum_env

            # check dir permissions to reduce likelihood of half-initialized database
            ls /docker-entrypoint-initdb.d/ > /dev/null

            docker_init_database_dir
            pg_setup_hba_conf

            # PGPASSWORD is required for psql when authentication is required for 'local' connections via pg_hba.conf and is otherwise harmless
            # e.g. when '--auth=md5' or '--auth-local=md5' is used in POSTGRES_INITDB_ARGS
            export PGPASSWORD="${PGPASSWORD:-$POSTGRES_PASSWORD}"
            docker_temp_server_start "[email protected]"

            docker_setup_db
            docker_process_init_files /docker-entrypoint-initdb.d/*

            docker_temp_server_stop
            unset PGPASSWORD

            echo
            echo 'PostgreSQL init process complete; ready for start up.'
            echo
        else
            echo
            echo 'PostgreSQL Database directory appears to contain a database; Skipping initialization'
            echo
        fi
    fi

    exec "[email protected]"
}

Co do "dlaczego?" Myślę, że to z powodu chęci działania jako mniej uprzywilejowany użytkownik.

Możesz "rozwiązać" problem, określając wolumin w pliku Compose w następujący sposób:

Woluminy
    volumes:
       - ./data/pgsql:/var/lib/postgresql/data

Następnie pominie procedurę, aby upewnić się, że DATABASE_ALREADY_EXISTS .

Lub, jeśli to nie pomoże — możesz zagłębić się w skrypt punktu wejścia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Reprezentowanie rzadkich danych w PostgreSQL

  2. Railsy oczekujące na migrację w rake db:test:prepare

  3. Czym różni się PostgreSQL od MySQL?

  4. pg_dump:jak zainstalować na Amazon Linux dla PostgreSQL 9.5.2?

  5. Utwórz/wstaw Json w Postgresie z żądaniami i psycopg2