我正在尝试使用postgre sql的docker image使用spring构建RESTapi。当我尝试运行脚本来构建数据库和创建表时,我遇到了这个错误。
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;