Не выдаются права в контейнере docker postgresql

Создаются юзер и таблицы, но права не выдаются. Подскажите в чем может быть проблема - уже голову сломал:

Dockerfile:

FROM postgres:12-alpine
COPY src/main/resources/init.sql /docker-entrypoint-initdb.d/

init:

CREATE DATABASE rootdb;
\c rootdb;

CREATE USER root WITH PASSWORD 'root';
GRANT ALL PRIVILEGES ON DATABASE rootdb TO root;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO root;

CREATE TABLE IF NOT EXISTS public.students (
    id          INT             GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    NAME        VARCHAR(255)    NOT NULL,
    COURSE      VARCHAR(255)    NOT NULL
);

CREATE TABLE IF NOT EXISTS public.emails (
    ID      INT            GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    email   varchar(255)    NOT NULL UNIQUE,
    STUDENT_ID    INT    REFERENCES STUDENTS(ID)
);

При подключении root к бд и попытки сделать выборку прав:

select * from emails;

ERROR:  permission denied for table emails
SQL state: 42501

Причем если запустить повторно

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO root;

То все ок.


Ответы (1 шт):

Автор решения: Roman Konoval

Сначала создавайте таблицы, а уже потом давайте права.

GRANT ALL PRIVILEGES ON ALL TABLES дает права на все существующие таблицы, а не на те, которые будут созданы в будущем.

Второй вариант это сделайть пользователя владельцем БД ALTER DATABASE rootdb OWNER TO root. В этом случае у него будет доступ ко всем объектам в БД.

→ Ссылка