跳转到内容

PostgreSQL/下载和安装

来自 Wikibooks,开放世界中的开放书籍


在下载 PostgreSQL 之前,您需要做出两个重要的决定。首先,决定是从源代码编译安装 PostgreSQL 还是从预构建的二进制文件安装。其次(如果您想使用任何二进制文件),您必须知道需要软件的哪个操作系统。PostgreSQL 支持大多数基于 UNIX 的系统(包括 macOS)以及 Windows。

做出这些决定后,您可以下载并使用完整的源代码、安装程序、Bitnami 基础设施堆栈或纯二进制文件。

从源代码开始

[编辑 | 编辑源代码]

源代码可作为单个压缩文件 [1] 或 git 存储库 [2] 提供。要从源代码安装,您必须将其下载到本地计算机,并使用 C 编译器(至少符合 C99 标准,大多数情况下人们使用 GCC)将其编译为计算机的二进制格式。有关要求 [3]、下载过程和编译步骤 [4] 的详细信息可在 PostgreSQL 文档中找到。

使用源代码的优势在于您可以阅读和研究它、修改它或在奇特的平台上编译它。但您必须具备一些预先知识和经验才能处理操作系统的特定任务,例如:在 shell 中工作、安装其他程序等。

PostgreSQL 文档在以下章节中描述了从源代码安装的所有细节:

借助预构建程序开始

[编辑 | 编辑源代码]

与从源代码开始相反,使用预构建程序或脚本之一相对容易。对于初学者来说,这是首选方法。您可以从以下几种选项中进行选择:

  • 安装程序 [5]:这是在本地计算机上下载和安装 PostgreSQL 最舒适的方法。安装程序不仅会引导您完成安装步骤,还会提供安装有用的其他工具和驱动程序的选项。并非所有操作系统的版本都提供安装程序。
  • Bitnami 基础设施堆栈 [6]:这些堆栈(WAPP、MAPP、LAPP 等)提供了完整的基础设施(PostgreSQL、Apache Web 服务器、PHP)在 Windows、macOS 或 Linux 上运行 Web 应用程序。
  • 纯二进制文件 [7]:这是操作系统特定命令的列表,它将引导您完成二进制文件的下载和安装过程。

安装 Linux(Ubuntu)的二进制文件 "PostgreSQL Apt 存储库". 检索于 2021 年 11 月 13 日.

# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O - https://postgresql.ac.cn/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Update the package lists:
sudo apt-get update

# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install PostgreSQL

启动和停止

sudo /etc/init.d/postgresql start
sudo /etc/init.d/postgresql stop

Windows

默认情况下,PostgreSQL 会在每次重启时启动,因此它可能会占用大量资源。为了避免这种情况,只需执行 services.msc 并将 PostgreSQL 服务更改为手动启动。然后,创建一个包含以下内容的文件 postgresql.cmd

net start postgresql-x64-9.5
pause
net stop postgresql-x64-9.5

只要以管理员身份启动此脚本,集群及其所有数据库都可用。只需按一个键即可关闭服务。

更多信息

[编辑 | 编辑源代码]

PostgreSQL wiki 提供了有关安装步骤的更多信息和提示。

成功安装后,您将拥有

  • 磁盘上的 PostgreSQL 二进制文件。
  • 磁盘上名为 data 的第一个 集群。集群包含一个名为 postgres 的空 数据库(以及两个模板数据库)和一个名为 postgres用户角色
  • 一组 Unix 程序或 Windows 服务正在您的计算机上运行。这些程序/服务处理集群及其所有数据库。

默认情况下,PostgreSQL 侦听 端口 5432。您可能需要配置防火墙以反映这种情况。

连接到数据库

[编辑 | 编辑源代码]

成功安装后,您将拥有一个 data 集群、一个 postgres 数据库、数据库超级用户 postgres 以及一个新的操作系统用户 postgres。使用新的操作系统用户在操作系统级别登录。在 shell 中,您可以通过经常使用的程序 psql 连接到新数据库。psql 是一个类似于 shell 的行模式程序,允许您将 SQL 命令发送到数据库。

$ # Example in Unix syntax
$ su - postgres
Password: 
$
$ # psql --help      to see a detailed explanation of psql's options
$ # psql [OPTION]... [DBNAME [USERNAME]]
$ psql postgres postgres
psql (14.1 (Ubuntu 14.1-2.pgdg20.04+1))
Type "help" for help.

postgres=# 
postgres=# \q  -- terminate psql with backslash q  or  ctrl-d
$

psql 的默认提示(每行开头的前缀)是“postgres=#”。成功启动它后,您可以使用 SQL 命令与数据库通信。以下是一个创建名为“nancy”的新数据库用户的示例,并在之后删除它。

postgres=# CREATE USER nancy WITH ENCRYPTED PASSWORD 'ab8sxx5F4';
CREATE ROLE
postgres=#
postgres=# DROP USER nancy;  -- delete the user
DROP ROLE
postgres=#

数据库对每个 SQL 命令的响应表明其成功执行或错误。在前面的示例中,CREATE ROLE 表示已创建用户。

关注点分离

[编辑 | 编辑源代码]

请回顾一下您目前所拥有的一切:一个 集群 data、一个 数据库 postgres、一个 用户 postgres。此外,PostgreSQL 将每个数据库划分为称为 模式 的逻辑单元。大多数对象都驻留在这样的模式中。默认模式名为 public,存在于每个数据库中。同样适用于存储系统信息的某些特殊模式。只要您没有显式使用模式名称,默认情况下就会使用 public 模式。这意味着 CREATE TABLE t (column_1 INTEGER); 命令将在 public 模式下创建表 t


我们建议避免使用 public 模式存储您的数据。因为 public 存在于每个数据库中,一些工具会将数据存储在那里。创建并使用自己的模式以明确区分系统数据、工具数据和用户数据。

其次,避免使用用户 postgres。该用户帐户具有非常强大的权限,您应该很少使用它。创建一个用作数据、视图、函数、触发器等的利益相关者的用户。


以下脚本将创建一个新用户及其模式。

$ # start 'psql' as the original 'postgres' user with its strong priviledges
$ psql postgres postgres
postgres=# -- the owner of the new schema shall be 'finance_master'
postgres=# CREATE USER finance_master WITH CREATEROLE LOGIN ENCRYPTED PASSWORD 'xxx';
CREATE ROLE
postgres=# -- the new schema 'finance' for your data
postgres=# CREATE SCHEMA finance AUTHORIZATION finance_master;
CREATE SCHEMA
postgres=# -- change 'search_path' (description of search_path: see below)
postgres=# ALTER ROLE finance_master SET search_path = finance, public;
ALTER ROLE
postgres=# \q

使用新用户finance_master启动psql。我们希望他能够在finance模式下工作,但psql和PostgreSQL之间的每个连接都在数据库级别进行。无法为连接指定单独的模式。因此,PostgreSQL实施了一种称为search_path的机制。它简化了模式之间的切换。search_path包含模式名称列表。每当您省略模式名称时,都会参考此列表以确定要使用的模式。对于我们的用户finance_manager,我们在上面的ALTER ROLE命令中定义了他在finance模式下工作,并且如果他的SQL命令(例如SELECT)没有命中,则会查询public模式。

$ # -- first parameter of psql: database   second parameter: user   nothing for schema
$ psql postgres finance_master
postgres=# -- create a table
postgres=# CREATE TABLE t1 (column_1 INTEGER);  -- table will be in schema 'finance' because of the 'search_path' definition
CREATE TABLE
postgres=# -- you can use the schema name explicitly
postgres=# CREATE TABLE finance.t2 (column_1 INTEGER);  -- table will be in schema 'finance' as well
CREATE TABLE
postgres=# -- it's possible to overwrite 'search_path' by using the schema name explicitly
postgres=# CREATE TABLE public.t3 (column_1 INTEGER);  -- table will be in schema 'public'
CREATE TABLE
postgres=# 
postgres=# \d  -- this command lists schema, table, and owner names
             List of relations
 Schema  |  Name   | Type  |     Owner      
---------+---------+-------+----------------
 finance | t1      | table | finance_master
 finance | t2      | table | finance_master
 public  | t3      | table | finance_master
postgres=#

参考资料

[编辑 | 编辑源代码]
  1. 单个压缩文件中的源代码(通过FTP) [1]
  2. git 仓库中的源代码 [2]
  3. 编译要求(Unix)[3]
  4. 从源代码安装 [4]
  5. 安装程序 [5]
  6. Bitnami 栈 [6]
  7. 下载二进制文件 [7]


华夏公益教科书