首先,我是PostgreSQL的新手。
所以我认为如果没有与当前用户名相同的数据库,就无法运行大多数psql util命令或非db指定的sql命令吗?
这就是说,例如,如果我以 postgres 运行psql "show databases;"
,而不是db ,则称为“postgres” “,我无法执行命令。
问题是,在这种情况下,在知道任何db 退出之前,找不到dbs列表,它是如何工作的?
答案 0 :(得分:3)
您必须连接到数据库。默认情况下,数据库“template1”和“postgres”将存在并将接受连接。
如果你的PostgreSQL管理员改变了你无法连接到这两个数据库的方式,那么你将不得不做两件事之一。
如果您具有CREATEDB权限,则可以在psql命令行上创建数据库。例如,我在这里有CREATEDB权限,所以我可以这样做,这会创建数据库“mike”并退出。
$ psql -h localhost -p 5435 -U mike -c "create database mike"
现在我可以通过利用默认数据库名称或指定它来连接到“mike”。
$ psql -h localhost -p 5435 -U mike
$ psql -h localhost -p 5435 -U mike mike
答案 1 :(得分:2)
你可以。如果您(通过适当的用户,通常是postgres
)连接到postgres
数据库,那么pg_catalog(PostgreSQL
)上有几个表,其中pg_database
表是一个简单的{{ 1}}将显示所有数据库。
至少在知道数据库目录的情况下,没有办法完全按照自己的意愿行事。 select * from pg_database
数据库是默认的,并且将存在于所有已安装的实例中(除非有人将其删除)。所有RDBM都具有相同的目录(也称为information_schema,或其他名称,具体取决于供应商),其中包含有关数据库,表,约束等的所有信息。