#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.sql2. Похоже, вам не хватает точки с запятой в конце строки 4. Если вы добавите туда точку с запятой, это поможет?
3. да, оба они помогают. также неправильно указаны привилегии. Спасибо