запутанная ошибка psql: не удалось подключиться к серверу: ФАТАЛЬНАЯ ошибка: роль «root» не существует ошибка

#postgresql #docker

#postgresql #docker

Вопрос:

Я пытаюсь создать RestAPI с помощью spring, используя docker-образ postgre sql. Я сталкиваюсь с этой ошибкой, когда пытаюсь запустить свой скрипт для создания базы данных и создания таблиц.

 psql: error: could not connect to server: FATAL:  role "root" does not exist
  

Я знаю, что на SO есть много сообщений, в которых задавались подобные вопросы. Почему я все еще в замешательстве, так это то, что инструкции, приведенные в решении, всегда должны использовать флаг -U для указания пользователя, отличного от root. Тем не менее, я уже делаю это, когда пытаюсь запустить этот скрипт, поэтому я не уверен, в чем проблема.

 //copy the script to my docker container
$ docker cp expensetracker_db.sql postgresdb:/

//build container and enter bash to execute the script
docker container exec -it postgresdb bash

//succeeds. try to run the sql script
$ psql -U postgres ==file expensetracker_db.sql

//and...
psql:expensetracker_db.sql:1: ERROR:  database "expensetrackerdb" does not exist
DROP ROLE
CREATE ROLE
psql:expensetracker_db.sql:5: error: connect: FATAL:  database "expensetrackerdb" does not exist
  

Я ОЧЕНЬ новичок в docker, поэтому извините за любые ошибки, которые я допустил на своем языке, описывающем эту ситуацию. Я подозреваю, что, возможно, есть что-то очень очевидное, чего я не замечаю в своем подходе. но мне кажется, что проблема, с которой я сталкиваюсь, должна быть решена с помощью аргумента -U, который я предоставляю при запуске скрипта.

Вот сценарий. Мне кажется, что синтаксические ошибки отсутствуют, но мой SQL немного ржавый..

 drop database expensetrackerdb;
drop user expensetracker;
create user expensetracker with password 'password';
create database expensetrackerdb with template=template0 owner=expensetracker
connect expensetrackerdb;
alter default privaleges grant all on tables to expensetracker;
alter default privaleges grant all on sequences to expensetracker;

create table et_users(
    user_id integer primary key not null,
    first_name varchar(28) not null,
    last_name varchar(28) not null,
    email varchar(30) not null,
    password text not null
);

create table et_categories(
    category_id integer primary key not null,
    user_id integer not null,
    title varchar(20) not null,
    description varchar(50) not null
);

alter table et_categories add constraint cat_users_fk
foreign key (user_id) references et_users(user_id);

create table et_transactions(
    transaction_id integer primary key not null,
    category_id integer not null,
    user_id integer not null,
    amount numeric(18,2) not null,
    note varchar(50) not null,
    transaction_data bigint not null
);

alter table et_transactions add constraint trans_cat_fk
foreign key (category_id) references et_categories(category_id);
alter table et_transactions add constraint trans_user_fk
foreign key (user_id) references et_users(user_id);

create sequence et_users_seq increment 1 start 1;
create sequence et_categories_seq increment 1 start 1;
create sequence et_transactions_seq increment 1 start 1000;
  

Комментарии:

1. Ну, это ==file expensetracker_db.sql должно быть -f expensetracker_db.sql или ` —file=expensetracker_db.sql

2. Похоже, вам не хватает точки с запятой в конце строки 4. Если вы добавите туда точку с запятой, это поможет?

3. да, оба они помогают. также неправильно указаны привилегии. Спасибо