Skip to content

1. 快速开始

1.1. 安装

当然,在使用 PostgreSQL 之前,您需要安装它。PostgreSQL 可能已经安装在您的站点上,因为它包含在您的操作系统发行版中,或者因为系统管理员已经安装了它。如果是这种情况,您应该从操作系统文档或系统管理员那里获取有关如何访问 PostgreSQL 的信息。

如果您不确定 PostgreSQL 是否已经可用,或者是否可以将其用于实验,那么您可以自己安装它。这样做并不难,它可能是一个很好的练习。PostgreSQL 可以由任何非特权用户安装;不需要超级用户(root) 访问权限。

如果您自己安装 PostgreSQL,请参阅 第 17 章 以获取安装说明,并在安装完成后返回本指南。请务必密切关注有关设置相应环境变量的部分。

如果站点管理员未以默认方式进行设置,则可能需要执行更多工作。例如,如果数据库服务器计算机是远程计算机,则需要将 PGHOST 环境变量设置为数据库服务器计算机的名称。可能还必须设置环境变量 PGPORT 。底线是这样的:如果您尝试启动一个应用程序,并且它抱怨它无法连接到数据库,您应该咨询您的站点管理员,或者,如果是您,则咨询文档以确保您的环境已正确设置。如果您不理解上一段,请阅读下一节。

1.2. 架构基础

在继续之前,您应该了解基本的 PostgreSQL 系统架构。了解 PostgreSQL 的各个部分如何交互将使本章更加清晰。

在数据库术语中,PostgreSQL 使用客户端/服务器模型。PostgreSQL 会话由以下协作进程(程序)组成:

  • 服务器进程,用于管理数据库文件、接受从客户端应用程序到数据库的连接,并代表客户端执行数据库操作。数据库服务器程序称为 postgres 。
  • 要执行数据库操作的用户客户端(前端)应用程序。客户端应用程序在本质上可以非常多样化:客户端可以是面向文本的工具、图形应用程序、访问数据库以显示网页的 Web 服务器或专用的数据库维护工具。某些客户端应用程序随 PostgreSQL 发行版一起提供;大多数是由用户开发的。

与客户端/服务器应用程序一样,客户端和服务器可以位于不同的主机上。在这种情况下,它们通过 TCP/IP 网络连接进行通信。应记住这一点,因为在客户端计算机上可以访问的文件在数据库服务器计算机上可能无法访问(或者可能只能使用其他文件名访问)。

PostgreSQL 服务器可以处理来自客户端的多个并发连接。为了实现这一点,它为每个连接启动(“forks”)一个新进程。从那时起,客户端和新服务器进程进行通信,而无需原始 postgres 进程的干预。因此,主管服务器进程始终在运行,等待客户端连接,而客户端和关联的服务器进程来来去去。(当然,所有这些对用户来说都是不可见的。为了完整起见,我们在这里提到它。

1.3. 创建数据库

查看是否可以访问数据库服务器的第一个测试是尝试创建数据库。正在运行的 PostgreSQL 服务器可以管理许多数据库。通常,每个项目或每个用户都使用单独的数据库。

您的站点管理员可能已经创建了一个数据库供您使用。在这种情况下,您可以省略此步骤并跳到下一部分。

若要创建新数据库,在此示例中名为 mydb,请使用以下命令:

bash
createddb mydb

如果这没有产生响应,则此步骤已成功,您可以跳过本节的其余部分。

如果您看到类似以下内容的消息:

bash
createdb: command not found

说明 PostgreSQL 未正确安装。要么根本没有安装它,要么您的 shell 的搜索路径未设置为包含它。尝试使用绝对路径调用命令:

bash
/usr/local/pgsql/bin/createdb mydb

站点上的路径可能不同。请与站点管理员联系或查看安装说明以更正情况。

另一个回应可能是这样的:

bash
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

这意味着服务器未启动,或者它没有侦听预期联系它的位置 createdb。再次检查安装说明或咨询管理员。

另一个回应可能是这样的:

bash
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "joe" does not exist

其中提到了您自己的登录名。如果管理员尚未为您创建 PostgreSQL 用户帐户,则会发生这种情况。(PostgreSQL 用户帐户与操作系统用户帐户不同。如果您是管理员,请参阅 第 22 章 以获取创建帐户的帮助。您需要成为安装 PostgreSQL 的操作系统用户(通常 postgres )才能创建第一个用户帐户。也可能是您分配了与操作系统用户名不同的 PostgreSQL 用户名;在这种情况下, -U 您需要使用开关或设置 PGUSER 环境变量来指定您的 PostgreSQL 用户名。

如果您有用户帐户,但它没有创建数据库所需的权限,您将看到以下内容:

bash
createdb: error: database creation failed: ERROR:  permission denied to create database

并非每个用户都有权创建新数据库。如果 PostgreSQL 拒绝为您创建数据库,则站点管理员需要授予您创建数据库的权限。如果发生这种情况,请咨询您的站点管理员。如果您自己安装了 PostgreSQL,则应使用您启动服务器的用户帐户登录本教程。[1]

还可以创建具有其他名称的数据库。PostgreSQL 允许您在给定站点上创建任意数量的数据库。数据库名称必须具有字母顺序的第一个字符,并且长度限制为 63 个字节。一个方便的选择是创建与当前用户名同名的数据库。许多工具都假定该数据库名称为默认名称,因此可以节省一些键入操作。若要创建该数据库,只需键入:

bash
createdb

如果您不想再使用数据库,可以将其删除。例如,如果您是数据库 mydb 的所有者(创建者),则可以使用以下命令将其销毁:

bash
dropdb mydb

(对于此命令,数据库名称不默认为用户帐户名称。您始终需要指定它。)此操作以物理方式删除与数据库关联的所有文件,并且无法撤消,因此只能在深思熟虑的情况下执行此操作。

更多关于 createdb 和 dropdb 可以分别在 createdbdropdb 中找到。


阐述

[1] 作为为什么这样做的解释:PostgreSQL 用户名与操作系统用户帐户是分开的。连接到数据库时,可以选择连接时使用的 PostgreSQL 用户名;否则,它将默认为与当前操作系统帐户相同的名称。碰巧的是,总会有一个 PostgreSQL 用户帐户与启动服务器的操作系统用户同名,并且该用户始终具有创建数据库的权限。除了以该用户身份登录外, -U 您还可以在任何地方指定选项来选择要连接的 PostgreSQL 用户名。

1.4. 访问数据库

创建数据库后,可以通过以下方式访问它:

  • 运行 PostgreSQL 交互式终端程序(称为 psql),它允许您以交互方式输入、编辑和执行 SQL 命令。
  • 使用现有的图形前端工具(如 pgAdmin)或具有 ODBC 或 JDBC 支持的办公套件来创建和操作数据库。本教程不涉及这些可能性。
  • 使用几种可用语言绑定之一编写自定义应用程序。这些可能性将在 第 IV 部分 进一步讨论。

您可能希望开始 psql 尝试本教程中的示例。可以通过键入以下命令为 mydb 数据库激活它:

bash
psql mydb

如果未提供数据库名称,则默认为用户帐户名称。在上一节中,您已经使用 createdb 发现了此方案。

在中 psql,您将收到以下消息:

bash
psql (16.1)
Type "help" for help.

mydb=>

最后一行也可以是:

bash
mydb=#

这意味着您是数据库超级用户,如果您自己安装了 PostgreSQL 实例,则很可能是这种情况。成为超级用户意味着您不受访问控制的约束。就本教程而言,这并不重要。

如果在开始时 psql 遇到问题,请返回上一节。psqlcreatedb 诊断是相似的,如果前者有效,后者也应该有效。

打印 psql 出的最后一行是提示符,它指示 psql 正在侦听您的声音,并且您可以在由 psql 维护的工作空间中键入 SQL 查询。尝试以下命令:

bash
mydb=> SELECT version();
                                         version
-------------------------------------------------------------------​-----------------------
 PostgreSQL 16.1 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)

mydb=> SELECT current_date;
    date
------------
 2016-01-07
(1 row)

mydb=> SELECT 2 + 2;
 ?column?
----------
        4
(1 row)

psql 程序有许多不是 SQL 命令的内部命令。它们以反斜杠字符“ \ ”开头。例如,您可以通过键入以下命令来获取有关各种 PostgreSQL SQL 命令语法的帮助:

bash
mydb=> \h

要退出 psql,请键入:

bash
mydb=> \q

并将 psql 退出并返回到命令 shell。(有关更多内部命令,请在 psql 提示符下键入 \?psql 文档中记录了全部 psql 功能。在本教程中,我们不会显式使用这些功能,但您可以在有用时自行使用它们。

Released under the GPL-3.0 License.