15 道 PostgreSQL 初级面试题
1. 什么是 PostgreSQL?
PostgreSQL 是一种轻量、免费且开源的关系型数据库管理系统。PostgreSQL 在各地区和各类公司中被广泛使用,并可运行在大多数主流操作系统上。
2. PostgreSQL 有哪些优势?
相较于其他 SQL 数据库,PostgreSQL 在多方面表现出色,包括:
- 健壮性强,适用于各种类型的应用,
- 免费且开源,
- 安全可靠,
- 提供多种数据类型,
- 拥有庞大的全球用户社区。
3. PostgreSQL 的主要应用是什么?
借助 PostgreSQL,您可以:
- 在数据库中创建、删除和更新表,
- 访问、处理和修改表中的数据,
- 从一个或多个表中提取并汇总所需信息,
- 在表中添加或删除特定的行或列
4. PostgreSQL 中的 CRUD 操作是什么?
CRUD(创建、读取、更新、删除)操作是任何 SQL 数据库系统(包括 PostgreSQL)的基础操作。CRUD 操作在数据库设计与管理中被频繁使用。
5. PostgreSQL 中的数据库是什么?
与其他 SQL 方言一样,数据库是一个结构化的存储空间,数据保存在多个表中,并经过组织,以便能够轻松获取、处理和汇总所需信息。
6. PostgreSQL 中的 pgAdmin 是什么?
pgAdmin 是随 PostgreSQL 安装提供的便捷工具,它通过优秀的图形界面让您执行日常的数据库相关任务。
7. 如何在 PostgreSQL 中创建新数据库?
PostgreSQL 使用标准的 CREATE DATABASE 命令来创建新数据库。不过细节决定成败。创建数据库需要考虑的因素很多,因此我们准备了 Creating PostgreSQL Databases 课程来为您保驾护航。
8. 如何向某个表中添加新值?
PostgreSQL 使用标准的 INSERT INTO 语句向 SQL 表中添加数据。
9. 如何在 PostgreSQL 中删除数据库?
要在 PostgreSQL 中删除数据库,请使用 DROP DATABASE 命令。
10. PostgreSQL 中的模式(schema)是什么?
数据库模式包含整个关系型数据库的逻辑与可视化配置。在 PostgreSQL 中,它包括表,以及数据类型、视图、索引、序列、约束和函数。
11. 如何在 PostgreSQL 中选出名为“customers”的表的前五行?
您可以使用以下查询获取该数据:
SELECT * FROM customers LIMIT 5;
12. PostgreSQL 中的约束(constraint)是什么?
一组条件,用于定义可输入到表中各列的数据类型。约束用于确保表中的数据完整性,并防止不期望的操作。
13. PostgreSQL 中的连接(join)是什么?
连接用于合并并检索来自两个或多个表的记录。PostgreSQL 使用标准 SQL 的连接来执行此类操作。
14. 您能解释一下 PostgreSQL 中的主键(primary key)吗?
主键用于在表中唯一标识一行。主键可以由一个或多个列组成。主键可视为一种约束类型。
15. PostgreSQL 是否与 Python 兼容?
是的,有许多可用的包允许您通过 Python 使用 PostgreSQL。Psycopg 是最流行的 PostgreSQL Python 库之一。想了解如何通过 Python 使用 PostgreSQL?请阅读我们的文章使用 PostgreSQL 的 Python 教程:创建、连接与管理数据库。
15 道 PostgreSQL 中级面试题
16. PostgreSQL 中外键与主键的区别是什么?
外键在两个或多个表之间提供共享键,而主键仅允许唯一且严格非空的值。二者都被视为约束类型。
17. PostgreSQL 的主要约束有哪些?
PostgreSQL 提供以下约束:
- 检查约束(Check)
- 非空约束(Not-Null)
- 唯一约束(Unique)
- 主键(Primary Key)
- 外键(Foreign Key)
- 排除约束(Exclusion)
18. PostgreSQL 的最新版本是什么?
截至 2024 年 1 月,最新版本为 PostgreSQL 16。
19. 可以在云端运行 PostgreSQL 吗?
可以。PostgreSQL 兼容并可运行在大多数主流云服务商上,包括 AWS、Azure 和 Google Cloud。
20. PostgreSQL 中的 PL/Python 是什么?
PostgreSQL 支持一种称为 PL/Python 的过程式语言。它允许您使用 Python 编写 SQL 函数与过程。
21. PostgreSQL 中的多版本并发控制(MVCC)是什么?
多版本并发控制(MVCC)是 PostgreSQL 的一项高级技术。它在多用户场景中提升数据库性能。也就是说,在查询数据库时,每个事务都会看到某个时间点的数据快照(数据库版本),而不受底层数据当前状态的影响。这可以防止由于其他并发事务对相同行的更新而导致事务读取到不一致的数据。
简单来说,MVCC 会为单条数据库记录创建多个版本,使不同事务能够访问同一记录的不同版本而互不冲突,从而实现并行处理。
22. PostgreSQL 中表的最大大小是多少?
虽然 PostgreSQL 的数据库大小不受限制,但表的最大大小为 32 TB。
23. PostgreSQL 的主要运算符有哪些?
PostgreSQL 中可用的主要运算符类型包括:
- 算术运算符
- 逻辑运算符
- 比较运算符
- 按位运算符
24. PostgreSQL 中的索引是什么?
索引是与表相关的特殊数据结构,用于存储其重要部分并实现更快的数据搜索与检索。其原理是创建排序的数据结构,使 PostgreSQL 相较于全表扫描能更快定位行。对于大型数据库,索引尤为高效,能够显著提升查询性能。
25. PostgreSQL 中的分区是什么?
分区是将大型表拆分为更小部分的过程。可通过多种方法实现,包括范围分区、列表分区和哈希分区。
26. PostgreSQL 中事务的四大特性是什么?通常用哪个首字母缩写表示?
PostgreSQL 中的事务应当具备原子性、一致性、隔离性和持久性。这些特性通常用首字母缩写 ACID 表示。
27. PostgreSQL 中的预写式日志(Write-Ahead Logging)是什么?
预写式日志是一种用于确保 PostgreSQL 数据库数据完整性的技术。它要求对数据库的任何更改与操作都要先记录到事务日志中,再执行数据库更新或修改。若数据库崩溃,这有助于提供数据库更改的日志。
28. PostgreSQL 中有哪些类型的连接(join)?
在 PostgreSQL 中,主要的连接有:
- INNER JOIN:返回两张表中匹配的记录
- LEFT JOIN:返回左表的所有记录,以及右表中匹配的记录
- RIGHT JOIN:返回右表的所有记录,以及左表中匹配的记录
- FULL JOIN:当左表或右表存在匹配时,返回所有记录
29. PostgreSQL 中的函数是什么?
函数(也称为存储过程)允许您将本需多条查询完成的多项操作封装为一个过程,供随时复用,从而帮助用户节省时间。想进一步了解 PostgreSQL 函数,请查看我们的Functions for Manipulating Data in PostgreSQL 课程
30. PostgreSQL 中的视图是什么?
视图表示对一个或多个底层表进行查询后的结果。视图可用于简化复杂查询,因为这些查询在视图中被定义一次,之后可以直接通过视图进行查询。
15 道 PostgreSQL 高级与技术面试题
31. PostgreSQL 中的规范化(Normalization)是什么?
数据库规范化是通过创建或修改数据库与表,来解决与数据存储、数据修改或查询过程相关低效问题的过程。简单来说,规范化包含多步操作,旨在降低数据冗余和复杂性。
32. PostgreSQL 中的触发器(trigger)是什么?
触发器(也称回调函数)是一种规定:只要执行某类操作,数据库就应自动执行特定函数。触发器可以定义为在 INSERT、UPDATE 或 DELETE 操作之前或之后执行,每个被修改的行触发一次,或每条 SQL 语句触发一次。当触发事件发生时,会在适当的时间调用触发器函数来处理该事件。触发器有助于在数据库修改过程中确保数据完整性。
33. 如何在 PostgreSQL 中备份数据库?
在 PostgreSQL 中备份数据库相当简单。备份的方法多种多样,包括:
- SQL 转储(dump)
- 文件系统级备份
- 在线备份
34. pg_dump 方法用于做什么?
pg_dump 方法允许您创建一个包含一组 SQL 命令的文本文件,将其在 PostgreSQL 服务器上运行后,可将数据库还原到转储时的状态。
35. 如何删除一张表以及与其关联的任意对象(如视图、触发器、函数和存储过程)?
要在 PostgreSQL 中删除表,请使用 DROP TABLE 命令并跟上表名。为确保删除与其关联的其他对象,需要添加 CASCADE 命令。
36. 分区有哪些好处?
分区可以将表划分为更小、更易管理的分区,从而提升查询性能。它尤其适用于处理超大表的场景。
37. 删除大表中所有行的最快方式是什么?
删除表中行主要有两种方式:DELETE 命令和 TRUNCATE 命令。前者用于选择性删除,需要对表进行完整扫描;后者可快速删除所有行并释放磁盘空间,无需表扫描。因此,TRUNCATE 命令更为合适。
38. 在 PostgreSQL 中使用哪些命令来控制事务?
控制事务的三个主要命令是:
- BEGIN TRANSACTION 或简写为 BEGIN:开始一个事务。
- COMMIT 或 END TRANSACTION:保存更改。COMMIT 将自上次 COMMIT 或 ROLLBACK 以来的所有事务保存到数据库。
- ROLLBACK:用于撤销尚未保存到数据库的事务。
39. PostgreSQL 如何确保安全性?
PostgreSQL 是最安全的 SQL 数据库之一。安全性通过多个层面来实现:
- 数据库文件保护。数据库中存储的所有文件均受保护,除 Postgres 超级用户账户外的任何账户均无法读取。
- 默认情况下,客户端到数据库服务器的连接仅允许通过本地 Unix 套接字。
- 可按 IP 地址和/或用户名限制客户端连接。
- 客户端连接可通过其他外部组件进行身份验证。
- 每个 Postgres 用户都会分配用户名(可选配密码)。
- 可将用户分配到组中,并基于组权限限制对表的访问。
40. 设想您有一张包含纽约历史每日气温的大表。对该表进行分区最有效的策略是什么?
处理时序数据时,最有效的策略是范围分区,它允许按照固定取值范围拆分表。在本例中,最可能的分区方式是按天进行分区。
41. PostgreSQL 中的并行查询是什么?
并行查询是 PostgreSQL 中的一项技术,它允许创建能够利用多个 CPU 来更高效回答查询的执行计划。当查询需要扫描大量数据但仅返回少量行(例如聚合计算)时,该技术尤其适用。
42. 如何提升 PostgreSQL 中的查询性能?
提升查询性能的策略有多种,包括:
- 使用索引,特别是在包含 WHERE 子句的查询中;
- 编写高效的 SQL 语句以降低处理开销,例如在 SELECT 语句中避免不必要的列。
- 对大型表实施分区。
- 通过调优服务器参数以契合硬件规格,优化内存使用。
在处理大型数据库时,提升查询性能对于避免不必要的瓶颈至关重要。查看我们的Improving Query Performance in PostgreSQL 课程,成为查询高手。
43. 在哪些场景下 EXPLAIN ANALYZE 命令会很有用?
EXPLAIN 命令会显示 SQL 语句的执行计划。这包括语句中引用的表将如何被处理、用于复杂操作(如连接)的底层算法,以及预估的执行时间。
如果除了预估时间外,您还想知道实际耗时,可以添加 ANALYZE 命令,语句将被真正执行,而不仅仅是规划。
总体而言,EXPLAIN ANALYZE 命令尤其有助于发现复杂查询中的瓶颈,从而便于重写以提升性能。
44. 如何在 PostgreSQL 中处理错误?
在 PostgreSQL 中处理错误主要有两种方式:
- 可开发回调函数来处理警告与错误状况。在这种情况下,您可以使用 WHENEVER 命令,指定在查询出现错误和警告时的特定行为。
- 可通过 sqlca 变量获取关于错误或警告的详细信息。该变量在执行过程中出现错误和警告时提供详细信息。
45. 日志在 PostgreSQL 故障排查中的意义是什么?
PostgreSQL 日志是排查问题、跟踪性能和审计数据库活动的宝贵资源。PostgreSQL 提供多种日志,包括错误日志。这些日志可以帮助您定位在执行期间导致错误的查询和语句。
超越技术技能
扎实的 PostgreSQL 知识对于通过面试至关重要。但请记住,面试同样会考察技术之外的其他能力。归根结底,数据科学项目的成功不仅取决于代码,也取决于写代码的人。
因此,在技术岗位上展现出色的软技能,如解决问题的思路、沟通与团队协作,将显著提升您拿到录用的机会。
因此,请做好应对行为面试问题的准备,比如如何应对截止日期、团队中的负面情绪以及苛刻的客户。这些情景不仅存在于数据从业者的日常工作中,也普遍存在于各行各业员工的工作中。因此,您以往的工作经历,即便与数据不直接相关,也能帮助您回答这些问题。花点时间认真作答,做自己:并没有明确的对或错之分。
准备您的 PostgreSQL 面试
充分准备 PostgreSQL 面试对于通过该环节至关重要。我们已经提到拥有扎实的 PostgreSQL 基础的重要性,但面试中还可能出现其他类型的问题,包括非技术类问题。
由于面试存在高度不确定性,这一阶段可能会带来压力。为帮助您顺利通过面试,我们准备了一些技巧与建议。
- 没有人期望您什么都懂。不会某项技能很正常。如果公司要求用 R 给出解决方案,但您只会用 Python,那就展示您如何用 Python 解决问题,并表达出学习 R 的意愿。
- 回答前先思考。如果问题需要,请请求多一些时间。这表明您认真对待他们的问题。但不要对每个问题都这么做。
- 解释您的角色为何对公司至关重要。有时,尤其是在小公司,他们未必完全清楚为什么需要数据科学家。如果是这种情况,请强调您如何通过改进现有产品或创建新方案来提升公司的知名度与利润。
- 如何应对拒绝。这就是当今竞争激烈的就业市场的现实。从错误中学习,持续学习新技能并精进旧技能。向更资深的员工请教,尤其是数据科学领域的同事。如果申请未成功,您也可以向面试官请求反馈。
请记住,行业各不相同。在不同领域担任数据从业者的工作差异可能很大。生物科技公司与云服务提供商并不相同。花些时间了解公司所在领域的特性,并向公司展示您的学习意愿。然而,从根本上说,大家都在与数据打交道,而无论行业如何,处理数据的方式有许多相通之处。
正如 Mastercard 的首席数据官 Andrew Reiskind 在一档DataFramed 播客节目中所言:
我们在去年年初做过一次很有意思的练习,就是找出我们的优先事项在哪里。我们的重点依然是数据质量。AI 基本上是在更少人工干预的情况下,以更快的速度消耗更多的数据。因此,数据的质量与可理解性变得更加重要。正是这种反馈循环不断强化了把基础打牢以供给 AI 的需求,这样我们才能知道与完整性、准确性相关的质量指标,这是至关重要的使命。
结语
恭喜您读到本指南的最后。我们希望这份常见的 PostgreSQL 面试题清单能帮助您做好准备,更加自信地面对面试。
如果您觉得还需要更多 PostgreSQL 培训来更好地备战面试,DataCamp 可以提供帮助。请查看以下课程和专题材料:

我是一名自由职业的数据分析师,与全球各地的公司和组织合作开展数据科学项目。我也担任数据科学讲师,拥有2年以上授课经验。我经常用英语和西班牙语撰写与数据科学相关的文章,其中一些已发表在 DataCamp、Towards Data Science 和 Analytics Vidhya 等知名网站上。作为一名具有政治学与法律背景的数据科学家,我的目标是在公共政策、法律与技术的交汇处开展工作,借助思想的力量推动创新解决方案与叙事,帮助我们应对紧迫挑战,尤其是气候危机。我认为自己是自学成才、不断进步的人,坚定支持跨学科合作。学习新事物永远不嫌晚。
鉴于 PostgreSQL 的流行,您所申请的职位很可能需要一定的 PostgreSQL 熟练度。为帮助您应对面试流程,本文将概览各个级别最常见的 PostgreSQL 问题与答案。
面试通常会从更基础、通用的问题开始,逐步过渡到更复杂的问题。资历水平也很重要:如果您申请的是更高级的岗位,整体题目难度也会更高。
最后,回答问题时务必言简意赅。直奔主题要好于东拉西扯,否则可能引出面试官的更多追问,而这些追问您未必都能得心应手。别担心:在整个面试以及后续的流程中,您会有足够的时间展示自己的能力。
让我们开始吧!