初探PostgreSQL

在群友的安利(传教)下,成功引起了我的兴趣…

在作了一些了解之后,记录如下。以下本文的命令是在 Arch Linux 上进行的,其他发行版暂不作讨论,不过应该也普遍适用。

安装没什么可说的,直接 sudo pacman -S postgresql 就好了。(其他发行版请使用对应的包管理器)

安装 PostgreSQL 的时候会同时创建一个名为 postgres 的系统账户。这个账户同时也是 PostgreSQL 数据库中的 Superuser, 因此创建数据库账户或者创建数据库都需要由这个账户来进行操作。

如果没有指定配置文件直接在 terminal 中键入 postgres 后显示可能会显示如下结果:

postgres does not know where to find the server configuration file.  
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.

因此需要先切换到 postgres 账户:

$ sudo -iu postgres

然后初始化配置:

$ initdb -D /var/lib/postgres/data

值得一提的是,默认情况下,数据库的编码和语言环境会使用本机的系统编码和语言环境,因此如果系统不是英文环境或者编码不是 utf-8 的还是建议通过指定编码和语言环境的方式来覆盖掉默认值。就像这洋:

$ initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'

上条与上上条命令中的 -D 会指定默认(default)的存储位置。若无特殊需求,一般使用默认位置就行,如果想要修改存储位置,可以看这里,此处不再赘述。

如果一切顺利,应该会出现以下结果:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgres/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /var/lib/postgres/data -l logfile start

然后启动 postgresql server 服务:

$ sudo systemctl start postgresql.service

到此处事实上已经完成了,但是这一切都是在 postgres 这个账户下进行操作的,为了便于自己本机日常使用的账户进行操作,可以在 postgresql 数据库中创建一个和自己本机账户同名的数据库账户,仍然需要 postgres 这个 Superuser 来继续操作:

$ createuser --interactive

上条命令执行后,在这里为了方便,我将其设置成了 superuser,交互如下:

Enter name of role to add: [此处填写你的本机账户名]
Shall the new role be a superuser? (y/n) y

创建完用户就可以输入 exit 来换回本来的账户了。接下来创建数据库:

$ createdb [此处填写数据库名称]

如果创建的数据库用户名称与本机不同名,此时通过 createdb 命令来创建数据库就会出现如下错误:

createdb: could not connect to database template1: FATAL:  role "[你的本机账户名]" does not exist

如果一切顺利,就可以通过 psql -d [数据库名称]来访问你的数据库了。

以下是进入数据库后的一些查询命令:

\help -> 查看所有数据库的命令。
\help [命令] -> 查看此命令的详细信息及用法。类似于 man page。
\du -> 列出所有的账户及其权限。
\dt -> 显示当前数据库所有表的摘要信息。
\q -> 退出

参考资料

  1. PostgreSQL Doc
  2. Arch Wiki PostgreSQL
Built with Hugo
主题 StackJimmy 设计