Postgres createdb 和 create database 在 Ubuntu 18.04 中不起作用
Posted
技术标签:
【中文标题】Postgres createdb 和 create database 在 Ubuntu 18.04 中不起作用【英文标题】:Postgres createdb and create database is not working in Ubuntu 18.04 【发布时间】:2022-01-06 21:17:33 【问题描述】:我有一个 Django 项目,我正在尝试在 Ubuntu 上设置并在 PostgreSQL 14 中创建一个新数据库。
默认的root用户和往常一样是Postgres。
然后我尝试使用我的 Linux 用户名“abc”创建一个具有所有权限的新用户:“SUPERUSER”、“CREATEDB”等。一切正常并创建了一个新用户。
有人建议我创建一个同名“abc”的数据库。
所以,我在 psql shell 中做了
CREATE DATABASE abc;
,它没有给出任何错误,也没有任何结果。
我在 bash 终端中尝试了
createdb abc
或creatdb
,但这也没有任何作用。
这个 SO 答案 link 的解决方案对我根本不起作用。
我也试过this,但没有做任何事情。
我最终只是希望能够为我的 Django 项目创建数据库,但我无法做到,而且我现在不知道自己做错了什么。
这是我用来设置 Django 项目数据库的命令:
# create new user who will be the db owner
# on Ubuntu, root user is postgres
createuser -P <new_user_name> -U <root_user>
# if you're having issues logging in
# see https://***.com/a/18664239/3187043
# create new db with the above created user as its owner
createdb -E UTF8 --lc-collate=en_IN.UTF-8 --lc-ctype=en_IN.UTF-8 -T template0 -O <new_user_name> -U <root_user> <new_db_name>
# this doesn't get created
# copy the contents to your new db
psql -U <new_user_name> <new_db_name> < ~/Downloads/backup-ocrdb-2018-09-13_1214.psql
#fails with no output
# Log in to psql console using
psql -U <new_user_name> <new_db_name>
#unable to login because db has not been created
正如@Laurenz Albe 所建议的
这是运行的输出:SELECT * FROM pg_locks;
【问题讨论】:
一定是错字。 我已经做了很多时间了,我不认为这是由于错字。 可能是 Windows 的问题,因为我是在 WSL2 中做的。 如果它挂起并且没有完成,这听起来像一个锁。查看 PostgreSQL 日志以获取有趣的消息。当CREATE DATABASE
挂起时,在第二个数据库会话中运行SELECT * FROM pg_locks;
并将结果添加到问题中。
你试过我推荐的吗?
【参考方案1】:
转到 linux 命令提示符并输入:
$su - postgres
然后请输入用户名以查看进度:
然后输入密码:
psql 然后会显示progressql命令提示符:
postgres = #
要查看所有创建的数据库,请使用此命令,它将显示所有数据库:
postgres = # \l
要创建新数据库,请使用以下命令:
postgres = # 创建数据库数据库名称;
要连接到特定的数据库,请使用以下命令:
postgres = # \c 数据库名称;
要将此连接的数据库的权限授予特定用户,请使用以下命令:
postgres = # 将 DATABASE dbname 的权限授予用户名;
【讨论】:
我认为你没有理解我的问题。以上是关于Postgres createdb 和 create database 在 Ubuntu 18.04 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在引导程序中获取 grails 数据源 createdb 属性
Postgres:除 phpPgAdmin 之外的所有权限都被拒绝