什么是PostgreSQL?
PostgreSQL是一个基于POSTGRES 4.2 版的对象关系数据库管理系统 ( ORDBMS ) ,由加州大学伯克利分校计算机科学系开发。POSTGRES 开创了许多概念,这些概念直到后来才在一些商业数据库系统中出现。
PostgreSQL是此原始 Berkeley 代码的开源后代。它支持大部分 SQL 标准并提供许多现代功能:
- 复杂查询
- 外键
- 触发器
- 可更新视图
- 交易诚信
- 多版本并发控制
此外,PostgreSQL还可以由用户以多种方式扩展,例如添加新的
- 数据类型
- 功能
- 运算符
- 聚合函数
- 索引方法
- 过程语言
而且由于采用了自由许可证,任何人都可以免费使用、修改和分发PostgreSQL用于任何目的,无论是私人目的、商业目的还是学术目的。
伯克利POSTGRES项目
POSTGRES项目由 Michael Stonebraker 教授领导,由国防高级研究计划局 ( DARPA )、陆军研究办公室 ( ARO )、国家科学基金会 ( NSF ) 和 ESL, Inc. 资助。POSTGRES的实现始于 1986 年。该系统的初始概念在[ston86]中提出,初始数据模型的定义出现在[rowe87]中。当时规则系统的设计在[ston87a]中描述。存储管理器的基本原理和架构在[ston87b]中详细描述。
从那时起POSTGRES经历了几个主要的版本。第一个“演示软件”系统在 1987 年开始运行并在 1988 年的ACM-SIGMOD会议上展示。版本 1(在[ston90a]中描述)在 1989 年 6 月发布给一些外部用户。作为对第一个规则系统([ston89])的批评的回应,规则系统被重新设计([ston90b]),版本 2 于 1990 年 6 月发布,使用了新的规则系统。版本 3 出现在 1991 年,增加了对多存储管理器的支持、改进的查询执行器和重写的规则系统。在大多数情况下,直到Postgres95(见下文)之前的后续版本都专注于可移植性和可靠性。
POSTGRES已用于实现许多不同的研究和生产应用程序。这些包括:财务数据分析系统、喷气发动机性能监控程序包、小行星跟踪数据库、医疗信息数据库和多个地理信息系统。POSTGRES还被几所大学用作教育工具。最后,Illustra Information Technologies(后来并入Informix ,现在归IBM所有)采用了该代码并将其商业化。1992 年底,POSTGRES成为Sequoia 2000 科学计算项目的主要数据管理器。
1993 年,外部用户社区的规模几乎翻了一番。越来越明显的是,原型代码的维护和支持占用了大量的时间,而这些时间本应用于数据库研究。为了减少这种支持负担,伯克利POSTGRES项目在 4.2 版正式结束。
到 1996 年,情况已经变得很清楚, “ Postgres95 ”这个名字经不起时间的考验。我们选择了一个新的名字PostgreSQL ,以反映原始POSTGRES与具有SQL功能的较新版本之间的关系。同时,我们将版本号设置为从 6.0 开始,将数字放回到最初由伯克利POSTGRES项目开始的序列中。
许多人仍将PostgreSQL称为“ Postgres ” (现在很少使用全大写字母) ,因为这是传统做法,或者因为这样发音更方便。这种用法被广泛接受为昵称或别名。
Postgres95的开发重点是识别和理解服务器代码中存在的问题。对于PostgreSQL来说,重点已经转移到增强特性和功能,尽管所有领域的工作仍在继续。
关于从那时起PostgreSQL发生的事情的详细信息可以在附录 E中找到。
约定
命令概要中使用以下约定:方括号 ([和]) 表示可选部分。花括号 ({和}) 和竖线 ( |) 表示必须选择一个选项。点 ( ...) 表示前一个元素可以重复。所有其他符号(包括圆括号)都应按字面意思理解。
为了提高清晰度,SQL 命令前面带有提示符=>,shell 命令前面带有提示符$。不过,通常不显示提示符。
管理员通常是负责安装和运行服务器的人。用户可以是任何正在使用或想要使用 PostgreSQL 系统任何部分的人*。*这些术语不应被解释得太狭隘。
入门
架构基础知识
在我们继续之前,你应该了解基本的PostgreSQL系统架构。了解PostgreSQL各部分如何交互将使本章更加清晰。
用数据库术语来说,PostgreSQL使用客户端/服务器模型。PostgreSQL会话由以下协作进程(程序)组成:
- 服务器进程,负责管理数据库文件、接受来自客户端应用程序的数据库连接以及代表客户端执行数据库操作。数据库服务器程序称为
postgres。 - 用户的客户端(前端)应用程序想要执行数据库操作。客户端应用程序的性质可能非常多样化:客户端可以是面向文本的工具、图形应用程序、访问数据库以显示网页的 Web 服务器或专门的数据库维护工具。PostgreSQL 发行版附带了一些客户端应用程序;大多数是由用户开发的。
与客户端/服务器应用程序的典型情况一样,客户端和服务器可以位于不同的主机上。在这种情况下,它们通过 TCP/IP 网络连接进行通信。您应该记住这一点,因为在客户端计算机上可以访问的文件可能无法在数据库服务器计算机上访问(或只能使用不同的文件名访问)。
PostgreSQL服务器可以处理来自客户端的多个并发连接。为了实现这一点,它会为每个连接启动(“派生”)一个新进程。从那一刻起,客户端和新服务器进程就可以进行通信,而无需原始进程的干预。因此,postgres监控服务器进程始终在运行,等待客户端连接,而客户端和相关服务器进程则来来去去。(当然,所有这些对用户来说都是不可见的。我们在这里只提到这一点,以保证完整性。)
PostgreSQL语法
默认情况下,PostgreSQL安装完成后,自动了一个命令行工具SQL Shell(psql)
在macOS上使用终端命令行,打开终端,然后使用psql命令登陆。默认情况下、PostgreSQL会创建一个与你的系统用户名相同的数据库用户。
刚安装的PostgreSQL,没有用户名和密码的。需要用户自己使用命令创建一个新的超级用户和密码。
首先,尝试使用你的系统用户名登录: 打开终端,输入:
shellpsql postgres这里
shellpostgres是默认的系统数据库名。
如果上面的命令成功了,你应该会看到类似这样的提示符:
shellpostgres=#这意味着你已经成功登录到 PostgreSQL 控制台。
如果出现错误说找不到
shellpsql命令,你可能需要添加 PostgreSQL 的 bin 目录到你的 PATH 中。可以尝试:
shell/Library/PostgreSQL/[version]/bin/psql postgres其中
shell[version]是你安装的 PostgreSQL 版本号。
如果仍然无法登录,可以尝试指定主机:
shellpsql -h localhost postgres一旦登录成功,你可以创建一个新的超级用户和密码:
sqlCREATE USER your_username WITH PASSWORD 'your_password' SUPERUSER;请将
shellyour_username和
shellyour_password替换为你想要的用户名和密码。
显示如下,才表示创建成功,不然会输出ERROR: 错误信息
sqlCREATE ROLE创建一个新的数据库:
sqlREATE DATABASE your_database_name;退出 psql:
sql\q现在你可以使用新创建的用户名和密码登录:
shellpsql -U your_username -d your_database_name系统会提示你输入密码。
如果在这个过程中遇到任何问题,可能是因为 PostgreSQL 的具体安装方式或版本导致的。在这种情况下,你可以:
- 检查 PostgreSQL 服务是否正在运行
- 查看安装日志以获取更多信息
- 考虑重新安装 PostgreSQL,在安装过程中设置初始用户名和密码
如果你告诉我你是通过什么方式安装的 PostgreSQL(比如官方安装程序、Homebrew 等),我可以提供更具体的建议。