安装
自然,在你想开始使用PostgreSQL之前,你必须安装它。 PostgreSQL很有可能 已经安装到你的节点上了,可能是因为它包含在操作系统的发布里,或者是因为系 统管理员已经安装了它。如果是这样的话,那么你应该从操作系统的文档或者系统 管理员那里获取如何访问PostgreSQL的信息。详情见之后的介绍。
体系基本概念
在我们开始讲解之前,我们应该先了解PostgreSQL 系统的基本体系。理解PostgreSQL的组件之间的相 互关系将会使本节显得更清晰一些。
按照数据库术语来说,PostgreSQL使用一种客户端/服务器 的模式。一次PostgreSQL会话由下列相关的进程(程序)组成:
- 一个服务器进程,它管理数据库文件,接受来自客户端应用与数据库的连接,并且代表客 户端在数据库上执行操作。数据库服务器程序叫postgres。
- 那些需要执行数据库操作的用户的客户端(前端)应用。客户端应用可能本身就是 多种多样的:它们可以是一个字符界面的工具,也可以是一个图形界面的应用, 或者是一个通过访问数据库来显示网页的 web 服务器,或者是一个特殊的数据库 管理工具。一些客户端应用是和PostgreSQL发布一 起提供的,但绝大部分是用户开发的。
和典型的客户端/服务器应用(C/S应用)一样,这些客户端和服务器可以在不同 的主机上。这时它们通过 TCP/IP 网络连接通讯。你应该记住的是,在客户机 上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件 名进行访问)。
PostgreSQL服务器可以处理来自客户端的多个并发连接。 因此,它为每个连接启动("forks")一个新的进程。从这个时候开始,客户端和新服务 器进程就不再经过最初的postgres进程进行通讯。因此,主服务器总是在运行,等 待客户端连接,而客户端及其相关联的服务器进程则是起起停停。
创建一个数据库
要创建一个新的数据库,在我们这个例子里叫mydb,你可以使用下面的命令(是数据库目录中的,不是安装目录中的):
createdb mydb
如果不报错那么这一步就成功了,你就可以忽略本节余下的部分了。
如果你看到类似下面这样的信息:
createdb: command not found
那么就是PostgreSQL没有安装好:要么是就根本没装上、要么是搜索路径没有包含它。 尝试用绝对路径调用该命令试试:
/usr/local/pgsql/bin/createdb mydb
在你的节点上这个路径可能不一样。请和管理员联系或者看看安装指导以获取正确的位置。
另外一种响应可能是这样:
createdb: could not connect to database postgres: could not connect to server: No such
file or directory Is the server running locally and accepting connections on Unix domain
socket "..."?
这意味着服务器没有启动,或者没有在createdb预期的地方启动。
另外一个响应可能是这样:
createdb: could not connect to database postgres: FATAL: role "..." does not exist
在这里提到了你自己的登陆名。如果管理员没有为你创建PostgreSQL 用户帐号,就会发生这些现像。PostgreSQL用户帐号和操作系统用户帐号是不同的。你需要变成安装PostgreSQL的操作系统用户的身份(通常 是postgres)才能创建第一个用户帐号。也有可能是赋予PostgreSQL用户名和操作系统用户名不同;这种情况下,你需要使用-U开关或者使用PGUSER环境变量声明PostgreSQL用户名。
如果你有个数据库用户帐号,但是没有创建数据库所需要的权限,那么你会看到下面的东西:
createdb: database creation failed: ERROR: permission denied to create database
并非所有用户都经过了创建新数据库的授权。如果PostgreSQL 拒绝为你创建数据库,那么你需要让站点管理员赋予你创建数据库的权限。出现这种情况时 请咨询你的站点管理员。如果你自己安装了PostgreSQL,那么 你应该以你启动数据库服务器的用户身份登陆然后参考手册完成权限的赋予工作。为什么这么干就行了?解释下:PostgreSQL用户名 是和操作系统用户账号分开的。如果你与一个数据库连接,你可以指定以哪个 PostgreSQL用户名进行连接;如果你不指定,那么缺省 就是你当前的操作系统账号。如果这样,那么总有一个与操作系统用户同名的 PostgreSQL用户账号用于启动服务器,并且通常这个用 户都有创建数据库的权限。如果你不想以该用户身份登陆,那么你也可以在任何地方 声明一个-U选项来选择一个连接时使用的PostgreSQL用户名。
你还可以用其它名字创建数据库。PostgreSQL允许你在 一个节点上创建任意数量的数据库。数据库名必须是以字母开头并且小于 63 个字节 长。一个方便的做法是创建和你当前用户名同名的数据库。许多工具假设它为缺省的 数据库名,所以这样可以节省敲键。要创建这样的数据库,只需要键入:
createdb
如果你再也不想使用你的数据库了,那么你可以删除它。比如,如果你是数据库 mydb的属主(创建人),那么你就可以用下面的命令删除它:
dropdb mydb
对于这条命令而言,数据库名不是缺省的用户名,你必须明确声明它。这个动作物理 上将所有与该数据库相关的文件都删除并且不可恢复,因此做这件事之前一定要想清楚。
更多关于createdb和dropdb的信息可以在之后介绍,这里只是一个入门。
访问数据库
一旦创建了数据库,你就可以访问它: ‘
- 运行PostgreSQL交互的终端程序psql, 它允许你交互地输入、编辑、执行SQL命令。
- 使用我们现有的图形前端工具。(略)
- 使用多种语言绑定中的一种写一个客户应用。(略)
你可能需要启动psql来试验本教程中的例子。你可以用 下面的命令为mydb数据库激活它:
psql
如果你省略了数据库名字,那么它缺省就是你的用户账号名字。已经在前面的 使用createdb中说明了。
在psql里,你会看到下面的欢迎信息:
psql (10.3)
Type "help" for help.
postgres=#
这个提示符意味着你是数据库超级用户,最可能出现在你自己安装了 PostgreSQL的情况下。作为超级用户意味着你 不受访问控制的限制。
一般用户显示如下:
mydb=>
psql打印出的最后一行是提示符,它表示psql 正听着你说话,这个时候你就可以敲入SQL查询到一个 psql维护的工作区中。尝试一下下面的命令:
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 10.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)
postgres=# select current_date;
current_date
--------------
2018-10-10
(1 row)
postgres=# select 2 + 2 as "TOT";
TOT
-----
4
(1 row)
psql程序有一些不属于 SQL 命令的内部命令。它们以反斜杠 "\"开头。比如,你可以用下面的命令获取各 种PostgreSQL SQL命令的帮助语法(双击Esc是关键词提示):
postgres=# \h
Available help:
ABORT ALTER SERVER CREATE CAST CREATE TABLE DROP EXTENSION DROP TEXT SEARCH TEMPLATE REVOKE
ALTER AGGREGATE ALTER STATISTICS CREATE COLLATION CREATE TABLE AS DROP FOREIGN DATA WRAPPER DROP TRANSFORM ROLLBACK
ALTER COLLATION ALTER SUBSCRIPTION CREATE CONVERSION CREATE TABLESPACE DROP FOREIGN TABLE DROP TRIGGER ROLLBACK PREPARED
ALTER CONVERSION ALTER SYSTEM CREATE DATABASE CREATE TEXT SEARCH CONFIGURATION DROP FUNCTION DROP TYPE ROLLBACK TO SAVEPOINT
ALTER DATABASE ALTER TABLE CREATE DOMAIN CREATE TEXT SEARCH DICTIONARY DROP GROUP DROP USER SAVEPOINT...
要退出psql,键入:
postgres=# \q
然后psql就会退出并且返回到命令行 shell(要获取更多有关 内部命令的信息,你可以在psql提示符上键入\?)。
postgres=# \?
General
\copyright show PostgreSQL usage and distribution terms
\crosstabview [COLUMNS] execute query and display results in crosstab
\errverbose show most recent error message at maximum verbosity
\g [FILE] or ; execute query (and send results to file or |pipe)
\gexec execute query, then execute each value in its result
\gset [PREFIX] execute query and store results in psql variables
\gx [FILE] as \g, but forces expanded output mode
\q quit psql
\watch [SEC] execute query every SEC seconds
Help
\? [commands] show help on backslash commands
...