当没有与当前用户的

时间:2015-12-23 11:40:58

标签: postgresql

首先,我是PostgreSQL的新手。

所以我认为如果没有与当前用户名相同的数据库,就无法运行大多数psql util命令或非db指定的sql命令吗?

这就是说,例如,如果我以 postgres 运行psql "show databases;",而不是db ,则称为“postgres” “,我无法执行命令。

问题是,在这种情况下,在知道任何db 退出之前,找不到dbs列表,它是如何工作的?

2 个答案:

答案 0 :(得分:3)

您必须连接到数据库。默认情况下,数据库“template1”和“postgres”将存在并将接受连接。

如果你的PostgreSQL管理员改变了你无法连接到这两个数据库的方式,那么你将不得不做两件事之一。

  1. 向PostgreSQL管理员询问您应该连接的数据库。
  2. 创建数据库,然后连接到它。这样做的方法不止一种。
  3. 如果您具有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}}将显示所有数据库。

这是一张显示在pgAdmin III Tool上的图像 enter image description here

至少在知道数据库目录的情况下,没有办法完全按照自己的意愿行事。 select * from pg_database数据库是默认的,并且将存在于所有已安装的实例中(除非有人将其删除)。所有RDBM都具有相同的目录(也称为information_schema,或其他名称,具体取决于供应商),其中包含有关数据库,表,约束等的所有信息。