最常被问到的 48 个 PostgreSQL 面试问题与答案

2025年3月17日 | 阅读 15 分钟

以下是最常问的技术支持面试问题及其最佳答案列表。

1) 什么是 PostgreSQL?

PostgreSQL 是一个开源的对象关系型数据库管理系统,也称为 ORDBMS。它通常被称为 Postgres 或 Postgresql。在 SQL 世界中,它是最广泛和最受欢迎的对象关系型数据库管理系统之一,主要用于大型 Web 应用程序。它是一个功能强大的数据库管理系统,通过整合四个基本概念提供了额外的强大功能,使用户可以毫无问题地扩展系统。

它使用 SQL 语言并扩展其功能以安全地存储数据。它支持最佳实践,并允许用户在处理请求时检索数据。


2) PostgreSQL 最重要的特性有哪些?

PostgreSQL 最重要的特性如下:

免费下载

PostgreSQL 是开源软件,可以免费下载。我们可以从 PostgreSQL 的官方网站轻松下载。

兼容性领域

  • PostgreSQL 与多种操作系统兼容,如 Microsoft Windows、Linux、MacOS X、UNIX(AIX、BSD、HP-UX、SGI IRIX、Solaris 和 Tru64)等。
  • 它与多种编程语言兼容,如 C/C++、Java、Python、Perl、Ruby、Tcl 和 ODBC(开放数据库连接)。

PostgreSQL 兼容多种数据类型,例如:

  • 结构化数据类型,即数组、日期和时间、UUID(通用唯一标识符)、数组、范围等。
  • 原始数据类型,即字符串、整数、布尔值、数字等。
  • 自定义数据类型,即自定义类型、复合类型等。
  • 几何数据类型,即多边形、圆形、线、点等。
  • 文档数据类型,即 XML、JSON/JSONB、键值对等。

可扩展性

  • PostgreSQL 高度可扩展,因为它支持过程语言,如 Perl、PL/PGSQL、Python 等。
  • 它与外部数据包装器兼容,可以通过标准 SQL 接口连接到其他数据库。
  • 它支持 JSON/SQL 路径表达式、存储过程和函数。
  • 它支持可自定义的表存储接口。

安全且高度可靠

由于以下安全方面,PostgreSQL 是安全可靠的:

  • PostgreSQL 提供了一个健壮的访问控制系统和多种身份验证方法,如轻量级目录访问协议(LDAP)、通用安全服务应用程序编程接口(GSSAPI)、SCRAM-SHA-256、安全支持提供程序接口(SSPI)、证书等。
  • 它还支持列级和行级安全。
  • 它高度可靠,因为它提供灾难恢复功能,如活动备用和 PITR(时间点恢复)。
  • 它支持 WAL(预写日志)。
  • 它支持不同类型的复制,如同步、异步和逻辑复制。
  • 它支持国际化,包括 ICU 排序规则、不区分重音和大小写的排序规则以及全文搜索。
  • 它与 ANSI-SQL2008 兼容。
  • 它可以提高服务器端编程的功能性。

3) PostgreSQL 的主要优缺点是什么?

PostgreSQL 的优点

以下是 PostgreSQL 的一些最大优点:

  • PostgreSQL 以开源许可证提供,因此我们可以轻松获取 PostgreSQL 的源代码,立即实施并根据我们的要求进行更改。
  • 它是最容易学习的关系型数据库管理系统之一,因此用户在使用前不需要太多培训。
  • 它可以作为 LAMP 堆栈选项执行动态 Web 应用程序和网站。
  • PostgreSQL 是一个高度容错的数据库,广泛用于大型 Web 应用程序。
  • 它在企业和嵌入式使用中需要简单且低维护的管理。
  • PostgreSQL 健壮而强大。这就是为什么它被大型 Web 应用程序所青睐的原因。

PostgreSQL 的缺点

以下是 PostgreSQL 的一些主要缺点:

  • 与 MySQL 数据库相比,PostgreSQL 不支持许多开源应用程序。
  • 在 PostgreSQL 中,创建复制有点复杂,这降低了它的普及度。
  • PostgreSQL 的速度和性能不如其他一些数据库和工具。
  • PostgreSQL 不是由一家公司维护的。这可能是它的缺点之一。
  • 与 MySQL 数据库相比,它更慢。
  • 它不如 MySQL 流行,因此对于初学者来说,安装过程有时并不容易。

4) PostgreSQL 中使用了哪些不同的数据类型?

以下是 PostgreSQL 支持和使用的不同数据类型的列表:

  • 数字类型
  • 字符类型
  • 时间类型
  • Boolean
  • UUID
  • 几何基元
  • 任意精度数值
  • XML
  • 数组等

注意:PostgreSQL 还方便用户创建索引并为其建立索引。


5) 在 PostgreSQL 中,将一个大表拆分成更小部分的过程叫什么?

在 PostgreSQL 中,将一个大表拆分成更小部分的过程称为表分区。


6) 你如何理解 PostgreSQL 中的基本目录?

PostgreSQL 中的基本目录是 data_dir/base。它是 PostgreSQL 中的一个文件夹,包含集群中数据库使用的所有子目录,并存储您插入数据库的所有数据。


7) 你如何理解 PostgreSQL 中的字符串常量?

在 PostgreSQL 数据库中,字符串常量是由单引号(')包围的字符序列。例如:'这是一个字符串常量的例子'。


8) PostgreSQL 中表的​​最大尺寸是多少?

PostgreSQL 提供无限的用户数据库大小,但它不为表提供无限的大小。在 PostgreSQL 中,表的最大大小设置为 32 TB。


9) 你如何理解 PostgreSQL 中的分区表?

在 PostgreSQL 中,分区表是一种逻辑结构,用于将一个大表拆分成更小的部分。这些表的小部分称为分区。


10) 什么是 PostgreSQL 中的多版本并发控制?它有什么用?

多版本并发控制或 MVCC 是 PostgreSQL 中的一种先进技术,可提高多用户环境下的数据库性能。它主要用于避免不必要的数据库锁定,通过消除用户登录数据库的时间延迟。当其他人正在访问内容时,会发生这种时间延迟。在多版本并发控制或 MVCC 中,所有事务都作为记录保存。这就是为什么 PostgreSQL 保持数据一致性,不像大多数其他使用锁进行并发控制的数据库系统。


11) 多版本模型和锁定模型之间的主要区别是什么?

多版本并发控制和锁定模型之间的主要区别在于,在 MVCC 中,为查询或读取数据而获取的锁不会与为写入数据而获取的锁冲突。在这种情况下,读取永远不会阻塞写入,写入也永远不会阻塞读取。因此,与其他锁定模型相比,多版本并发控制具有优势。


12) PostgreSQL 服务器中的 pgAdmin 是什么?它有什么用?

在 PostgreSQL 服务器中,PgAdmin 是一款免费的开源 PostgreSQL 数据库管理 GUI 或工具,用于 Microsoft Windows、Mac OS X 和 Linux 系统。PgAdmin 用于检索、开发、进行质量测试和维护数据库或其他正在进行的维护工作。


13) 如何在 PostgreSQL 中设置 pgAdmin?

要在 PostgreSQL 中设置 pgAdmin,我们应该遵循以下步骤:

  • 首先,启动并运行 pgAdmin 4。
  • 然后,转到“仪表板”选项卡,单击“快速链接”部分,然后单击“添加新服务器”。
  • 点击“添加新服务器”后,您必须在“创建-服务器”窗口中选择“连接”选项卡。
  • 现在,通过在“主机名/地址”字段中输入服务器的 IP 地址来配置连接。
  • 最后,您必须将“端口”指定为“5432”,这是 PostgreSQL 服务器的默认端口。

14) 你如何理解 PL/Python?

PostgreSQL 支持一种名为 PL/Python 的过程语言。


15) PostgreSQL 的索引是什么?

PostgreSQL 的索引是内置函数或方法,如 GIST 索引、哈希表和 B 树(二叉树)。用户使用这些索引以向后方式扫描。PostgreSQL 还方便用户定义自己的 PostgreSQL 索引。


16) 避免不必要的数据库锁定的方法是什么?

避免不必要的数据库锁定的最佳方法是使用 MVCC(多版本并发控制)。这是 PostgreSQL 中用于提高数据库性能的一种先进技术。


17) PostgreSQL 中使用了哪些不同类型的运算符?

PostgreSQL 中主要使用四种类型的运算符:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

18) PostgreSQL 中的标记是什么?

在 PostgreSQL 中,标记是任何源代码的构建块。标记包含多种特殊字符符号,如常量、带引号的标识符、其他标识符和关键字。关键字标记包含预定义的 SQL 命令和含义。另一方面,标识符指定变量名,如列、表等。


19) PostgreSQL 中的模式包含什么?

在 PostgreSQL 中,模式包含表和数据类型、视图、索引、运算符、序列和函数。


20) Postgre 9.1 中引入了哪些新特性?

新的 PostgreSQL 9.1 版本正在致力于一些重要特性,例如 JSON 支持、同步复制、最近邻地理搜索、SQL/MED 外部数据连接、安全标签和仅索引访问。

以下是 PostgreSQL 9.1 中新增的一些特性列表:

  • 添加了对外部表的支持。
  • 添加了对每列排序规则的支持。
  • 添加了一些扩展来简化 PostgreSQL 附加功能的打包。
  • 添加了真正的可串行化隔离级别。
  • 向 GiST 索引添加了最近邻(按运算符排序)搜索。
  • 添加了 SECURITY LABEL 命令和对 SELinux 权限控制的支持。
  • 除了上述特性外,PostgreSQL 9.1 还允许其他功能,例如允许同步复制,允许在 WITH 子句中使用数据修改命令(INSERT/UPDATE/DELETE),通过在 CREATE TABLE 中使用 UNLOGGED 选项支持未记录日志的表,以及更新 PL/Python 服务器端语言。

21) 在 PostgreSQL 中使用索引有什么用?

在 PostgreSQL 中,索引被搜索引擎用来提高数据检索的速度。


22) 你对 PostgreSQL 的历史了解多少?

POSTGRES 项目于 1986 年由 Michael Stonebraker 教授发起并领导,由国防高级研究计划局(DARPA)、陆军研究办公室(ARO)、国家科学基金会(NSF)和 ESL, Inc. 赞助。核心平台已经有超过 30 年的积极开发历史。它自 2001 年以来就符合 ACID 标准,并在所有主要操作系统上运行。它还有一个像 PostGIS 数据库扩展器这样的附加组件。

Michel Stonebraker 被称为 PostgreSQL 之父。他于 1986 年开始并领导了这个数据库的开发,作为其前身 Ingres(现在由 Computer Associates 拥有)的后续项目。PostgreSQL 最初被称为 Postgres。由于其在大多数关系数据库中对 SQL 标准的普遍支持,它发音为 PostgreSQL。PostgreSQL 在 MAC OS 中被用作默认数据库。

Postgres 由 Michael Stonebraker 于 1986 年发起,作为其前身 Ingres(现由 Computer Associates 拥有)的后续项目。Postgres 的名字来源于其前身 Ingres。这里,Postgres 的意思是“在 Ingres 之后”。Postgres 的第一个项目是在 1986 年至 1994 年之间开发的。它提供了许多复杂的功能,例如多版本并发控制(MVCC)、时间点恢复、表空间、异步复制、嵌套事务(保存点)、在线/热备份、复杂的查询计划器/优化器以及用于容错的预写日志。


23) 我们称数据库回调函数为什么?它的用途是什么?

数据库回调函数被称为 PostgreSQL 触发器。当指定的数据库事件发生时,PostgreSQL 触发器会自动执行或调用。


24) 你如何在 Windows 上启动、停止和重启 PostgreSQL 服务器?

要在 Windows 上启动、停止和重启 PostgreSQL 服务器,首先,我们必须找到 PostgreSQL 数据库目录。它看起来像这样:C:\Program Files\PostgreSQL\10.4\data。现在,打开命令提示符并执行以下命令:

启动 Windows 的 PostgreSQL 服务器

停止 Windows 的 PostgreSQL 服务器

重启 Windows 的 PostgreSQL 服务器

在 Windows 上启动、停止和重启 PostgreSQL 服务器的另一种方法。

还有另一种在 Windows 上启动、停止和重启 PostgreSQL 服务器的方法。请遵循以下步骤:

  • 首先,同时按 Windows 键 + R 打开“运行”窗口。
  • 然后,输入 services.msc 来查找 PostgreSQL 服务。
  • 根据安装的版本搜索 Postgres 服务。
  • 单击停止、启动或重启选项来执行相同的操作。

25) 集群索引的作用是什么?

集群索引用于根据键值对表数据行进行排序。


26) 在 PostgreSQL 中使用哪个命令创建数据库?

在 PostgreSQL 中,CREATE DATABASE 命令用于创建新数据库。


27) 你如何在 PostgreSQL 中删除数据库?

在 PostgreSQL 中,您可以使用 psql 命令行工具中的 DROP DATABASE 命令删除数据库。


28) 你如何更新 PostgreSQL 中的统计信息?

要在 PostgreSQL 中更新统计信息,我们必须调用一个名为显式 'vacuum' 的特殊函数。此函数创建一个 Vacuum,其中使用 Analyze 选项来更新 PostgreSQL 中的统计信息。

语法


29) PostgreSQL 中集群索引和非集群索引的区别是什么?

PostgreSQL 中集群索引和非集群索引的主要区别在于,集群索引是一种索引类型,用于根据键值对表数据行进行排序。在 RDBMS 中,用户可以基于主键在该列上创建集群索引。另一方面,非集群索引是一种索引,其中行的顺序与实际数据的物理顺序不匹配。非集群索引按构成索引的列排序。


30) 创建表时在列中指定数据类型的优点是什么?

在创建表时在列中指定数据类型的主要优点是一致性、紧凑性、验证和最佳性能。


31) PostgreSQL 中使用了哪些不同类型的数据库管理工具?

以下是 PostgreSQL 中使用的不同类型的数据库管理工具:

  • Phppgadmin
  • Psql
  • Pgadmin

注意:在上述 PostgreSQL 数据库管理工具中,phppgadmin 是最受欢迎的。上述大多数工具都是前端管理工具和基于 Web 的界面。


32) 从 PostgreSQL 现有表中删除所有数据的方法是什么?

从 PostgreSQL 现有表中删除所有数据的最佳方法是使用 TRUNCATE TABLE 命令。


33) 使用 DROP TABLE 命令删除现有表中所有数据的缺点是什么?

在 PostgreSQL 中,可以使用 DROP TABLE 命令删除现有表中的所有数据,但使用 DROP TABLE 命令的最大缺点是它会从数据库中删除整个表结构。如果使用 DROP TABLE 命令删除表,则必须重新创建一个表来存储数据。


34) PostgreSQL 中事务的不同属性是什么?

像其他 RDBMS 一样,PostgreSQL 也支持 ACID 属性。这通常用首字母缩写词 ACID 来表示。这意味着 PostgreSQL 中事务的属性包括原子性、一致性、隔离性和持久性。


35) PostgreSQL 和 MongoDB 数据库之间有什么区别?

以下是 PostgreSQL 和 MongoDB 数据库之间的主要区别:

PostgreSQLMongoDB
PostgreSQL 是一个经典的关系型数据库服务器,支持大多数 SQL 标准。MongoDB 是一个 NoSQL 数据库。
PostgreSQL 是一种传统的关系型数据库管理系统(RDBMS)或基于 SQL 的数据库,如 Oracle 和 MySQL。它是开源且免费使用的。MongoDB 是一种无模式、NoSQL、JSON 格式的数据库。它也提供免费版本,但其企业付费版本更受欢迎。
PostgreSQL 数据库是用 C 语言编写的。MongoDB 是用 C++ 编写的。
PostgreSQL 是一个关系型数据库管理系统。MongoDB 是一个非关系型数据库管理系统。
PostgreSQL 是一个面向对象的数据库。MongoDB 是一个面向文档的数据库。
PostgreSQL 支持多种语言。MongoDB 仅提供英语版本。
在某些参数上,PostgreSQL 比 MongoDB 快 4 到 10 倍。MongoDB 比 PostgreSQL 慢。它最适合大数据。

36) 在 PostgreSQL 中使用哪些命令来控制事务?

以下命令用于在 PostgreSQL 中控制事务:

  • BEGIN TRANSACTION
  • COMMIT
  • ROLLBACK

37) 你如何理解 PostgreSQL 中的并行查询?它是如何工作的?

并行查询是 PostgreSQL 的一个高级功能,其中查询计划被安排以便分配给多个 CPU,用户可以更快地得到查询结果。


38) PostgreSQL 中 CTIDs 字段的用途是什么?

CTIDs 字段根据表中的块和偏移位置来标识表中的特定物理行。


39) 在 PostgreSQL 中使用命令 enable-debug 有什么用?

在 PostgreSQL 中,命令 enable-debug 用于编译所有应用程序和库。它提供了一些调试符号,方便开发人员发现脚本执行时可能出现的错误和其他问题。当我们执行此过程时,它可能会延迟或阻塞系统,并增大二进制文件的大小。


40) PostgreSQL 中的保留字是什么?

PostgreSQL 中的保留字是 SQL 关键字和其他在关系引擎处理时具有特殊含义的符号。根据 SQL 标准,保留关键字是唯一真正的关键字,它们不允许作为标识符。另一方面,非保留关键字在特定上下文中具有特殊含义,但在其他上下文中可以用作标识符。


41) 你如何理解 PostgreSQL 中的 WAL 或预写日志?

在 PostgreSQL 中,预写日志或 WAL 是确保数据完整性的标准方法。它是一种将操作和更改写入事务日志的协议或语法。

预写日志功能通过在对数据库进行任何更改或更新之前记录更改来增强数据库的可靠性。它在数据库发生故障时提供数据库日志,并确保可以从崩溃或中断的点重新开始工作。


42) PostgreSQL 中的表空间是什么?它有什么用?

在 PostgreSQL 中,表空间是磁盘上的一个位置,用于存储包含索引和表的数据文件。


43) 在 PostgreSQL 中,并发事务之间必须防止的三种现象是什么?

在 SQL 标准中,有四种事务隔离级别,涉及必须在 PostgreSQL 中并发事务之间防止的三种现象。这三种不希望出现的现象如下:

  • 脏读: 当一个事务读取由一个并发的未提交事务写入的数据时,称为脏读。
  • 不可重复读: 它指定一个事务重新读取它之前读取过的数据,然后发现另一个事务已经修改了它。
  • 幻读: 它指定一个事务重新执行一个查询,返回满足搜索条件的一组行,然后发现满足条件的行集由于另一个最近提交的事务而发生了变化。

44) Oracle 和 PostgreSQL 之间的主要区别是什么?

OraclePostgreSQL
Oracle 主要是一个辅助的对象关系型数据库管理系统。它是第一个为网格计算设计的数据库管理系统。PostgreSQL 是一个免费的、开源的对象关系型数据库管理系统,遵循 SQL 标准并具有可扩展性。
Oracle 是用 C、C++ 和汇编语言编写和实现的。PostgreSQL 是用 C 语言编写和实现的。
Oracle 是一个相对较老的数据库。它由 Larry Ellison 和 Bob 于 1977 年 6 月 16 日开发。PostgreSQL 是一个相对较新的数据库。它由 PostgreSQL 全球开发组于 1996 年 7 月 8 日开发。
使用 Oracle 必须需要许可证。PostgreSQL 是开源且免费使用的。
在 Oracle 中,服务器操作系统是 OS X、Linux、Windows、z/OS、AIX、HP-UX 等。在 PostgreSQL 中,服务器操作系统是 HP-UX、NetBSD、Solaris、Windows、Unix、Linux、FreeBSD 等。
Oracle 提供高级安全选项。PostgreSQL 也提供良好的安全支持,但与 Oracle 相比要少。
Oracle 支持的编程语言有 C、C++、JAVA、PERL、.NET、JavaScript、PHP 等。PostgreSQL 支持的编程语言有 C、C++、JAVA、PERL、SCALA、PHP、C#、COBOL、JavaScript 等。

45) 你如何理解 PostgreSQL 中的序列?

在 PostgreSQL 中,序列是一种特殊的数据形式,用于在数据库中生成多个数字标识符。它在表内的多个行之间创建唯一标识符。它主要用于创建序列和人工主键,类似于 MySQL 中的 Auto_Increment。


46) 在 SQL 语句中,一个标记代表什么?

在 SQL 语句中,一个标记代表一个标识符、关键字、带引号的标识符、特殊字符符号或一个常量。


47) 你如何理解 PostgreSQL 中的倒排文件?

在 PostgreSQL 中,倒排文件是一种索引数据结构,用于将内容映射到其在数据库文件、文档内或文档集中的位置。它通常包括在文本中找到的独特单词以及包含该单词在文本中出现位置的列表。它用于文档检索系统的数据结构中,以提供全文搜索。


48) 在 PostgreSQL 中存储二进制数据的方法是什么?

在 PostgreSQL 中存储二进制数据有两种方法,即使用字节或大对象功能。