Tengo un archivo docker-compose.yml
version: '3' services: postgres: image: postgres:13.1 healthcheck: test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ] timeout: 45s interval: 10s retries: 10 restart: always environment: - POSTGRES_USER=root - POSTGRES_PASSWORD=password - APP_DB_USER=docker - APP_DB_PASS=docker - APP_DB_NAME=docker volumes: - ./db:/docker-entrypoint-initdb.d/ ports: - 5432:5432 en el mismo directorio hay un directorio db con 1 archivo init.sql :
CREATE TABLE accounts ( user_id serial PRIMARY KEY, username VARCHAR ( 50 ) UNIQUE NOT NULL, password VARCHAR ( 50 ) NOT NULL, email VARCHAR ( 255 ) UNIQUE NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP ); insert into accounts(username,password,email,created_on) values ('a','aaa','assdfdas',now()) cuando ejecuto docker-compose up (si la base de datos está vacía) se ejecuta el archivo init.sql pero la base de datos en la que se ejecuta es root y no postgres , ¿cómo puedo cambiarlo?
Puede usar el comando psql \connect <db-name> dentro de su archivo init.sql para conectarse a la base de datos correcta (dado que la base de datos ya existe).
En su caso, el archivo init.sql se vería así:
\connect postgres <-- connects to the 'postgres' database CREATE TABLE accounts ( user_id serial PRIMARY KEY, username VARCHAR ( 50 ) UNIQUE NOT NULL, password VARCHAR ( 50 ) NOT NULL, email VARCHAR ( 255 ) UNIQUE NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP ); ...