PostgreSQL 入门

安装、设置、创建并开始使用您的第一个 PostgreSQL 数据库。
124 位读者喜欢这篇文章。
Why and how to handle exceptions in Python Flask

图片来自 Unsplash.com,知识共享零许可 

每个人都有一些东西可以收集到数据库中,这将非常有用。即使您痴迷于保存纸质文件或电子文件,它们也可能变得很麻烦。纸质文件可能会丢失或完全杂乱无章,而您需要在电子文件中访问的信息可能埋藏在段落和页面的深处。

当我还在行医时,我使用 PostgreSQL 来跟踪我的住院病人列表并提交有关我的住院病人的信息。我随身携带一份每日病人列表的打印件,以便快速参考并快速记录有关病人房间、诊断或其他详细信息的任何变化。

我以为这一切都已成为过去,直到去年,我的妻子决定买一辆新车,我“继承”了她之前的车。她一直保存着一个汽车维修和保养服务收据的文件夹,但随着时间的推移,它失去了任何组织性。需要花费时间翻阅所有的纸条,才能弄清楚何时做了什么,我认为 PostgreSQL 将是跟踪此信息的更好方法。

安装 PostgreSQL

我已经有一段时间没有使用 PostgreSQL 了,而且我忘记了如何开始使用它。事实上,我的电脑上甚至没有安装它。安装它是第一步。我使用 Fedora,所以在控制台中,我运行了

dnf list postgresql*

请注意,您不需要使用 sudo 来使用 list 选项。此命令返回了一个长长的软件包列表;在扫描它们之后,我决定我只需要三个:postgresql、postgresql-server 和 postgresql-docs。

为了找出我下一步需要做什么,我决定查阅 PostgreSQL 文档。这些文档是一份非常全面的参考资料——实际上非常广泛,以至于令人望而生畏。幸运的是,我找到了一些过去升级 Fedora 时做的笔记,当时我想有效地导出我的数据库,在新版本上重启 PostgreSQL,并导入我的旧数据库。

设置 PostgreSQL

与大多数其他软件不同,您不能只是安装 PostgreSQL 并开始使用它。您必须事先执行两个基本步骤:首先,您需要设置 PostgreSQL,其次,您需要启动它。您必须以 root 用户身份执行这些操作(sudo 在这里不起作用)。

要设置它,请输入

postgresql-setup –initdb

这将在计算机上建立 PostgreSQL 数据库的位置。然后(仍然以 root 身份),输入以下两个命令

systemctl start postgresql.service
systemctl enable postgresql.service

第一个命令在您计算机上的当前会话中启动 PostgreSQL(如果您关闭它,PostgreSQL 将关闭)。第二个命令使 PostgreSQL 在后续重启时自动启动。

创建用户

PostgreSQL 正在运行,但您仍然无法使用它,因为您尚未被命名为用户。为此,您需要切换到特殊用户 postgres。当您仍然以 root 身份运行时,键入

su postgres

由于您是以 root 身份执行此操作,因此您无需输入密码。root 用户可以在不知道密码的情况下作为任何用户操作;这是使其如此强大——和危险的部分原因。

现在您是 postgres 用户了,运行类似于以下示例的两个命令(它创建了用户 gregp)来创建您的用户

createuser gregp
createdb gregp

您可能会收到类似这样的错误消息:Could not switch to /home/gregp。这仅仅意味着用户 postgres 无权访问该目录。尽管如此,您的用户和数据库已创建。接下来,键入 Exit 并按两次 Enter 键,以便您再次变回您自己。

设置数据库

要开始使用 PostgreSQL,请在命令行中键入 psql。您应该在每行左侧看到类似 gregp=> 的内容,以表明您正在使用 PostgreSQL,并且只能使用它理解的命令。您会自动拥有一个数据库(我的数据库名为 gregp)——里面绝对是空的。从 PostgreSQL 的意义上来说,数据库只是一个工作空间。在该空间内,您创建。表包含变量列表,每个变量下方是构成数据库的数据。

以下是我如何设置我的汽车服务数据库

CREATE TABLE autorepairs (
	date		date,
	repairs		varchar(80),
	location	varchar(80),
	cost		numeric(6,2)
);

我可以将此内容连续键入在一行中,但我将其分解开来是为了更好地说明各个部分,并表明制表符和换行符的空白不被 PostgreSQL 解释。数据点包含在括号内,每个变量名称和数据类型与下一个用逗号分隔(最后一个除外),命令以分号结尾。所有命令都必须以分号结尾!

第一个变量名称是 date,其数据类型也是 date,这对于 PostgreSQL 来说是可以的。第二个和第三个变量 repairslocation 的数据类型都是 varchar(80),这意味着它们可以是最多 80 个字符(字母、数字或任何内容)的任意组合。最后一个变量 cost 使用 numeric 数据类型。括号中的数字表示最多有六位数字,其中两位是小数。起初,我尝试了 real 数据类型,这将是一个浮点数。real 作为数据类型的问题出现在更高级的命令中使用 WHERE 子句时,例如 WHERE cost = 0 或任何其他特定数字。由于 real 值存在一些不精确性,因此特定数字永远不会匹配任何内容。

输入数据

接下来,您可以使用命令 INSERT INTO 添加一些数据(在 PostgreSQL 中称为 row

INSERT INTO autorepairs VALUES ('2017-08-11', 'airbag recall', 'dealer', 0);

请注意,括号形成了一个值的容器,这些值必须按正确的顺序排列,用逗号分隔,并且命令末尾带有分号。datevarchar(80) 数据类型的值必须用单引号括起来,但像 numeric 这样的数字值则不需要。作为反馈,您应该看到

INSERT 0 1

就像在常规终端会话中一样,您将拥有已输入命令的历史记录,因此在输入后续行时,通常可以通过按向上箭头键显示上一个命令并根据需要编辑数据来节省大量时间。

如果您弄错了怎么办?使用 UPDATE 更改值

UPDATE autorepairs SET date = '2017-11-08' WHERE repairs = 'airbag recall';

或者,也许您不再希望表中有某些内容。使用 DELETE

DELETE FROM autorepairs WHERE repairs = 'airbag recall';

整行将被删除。

最后一件事:即使我在 PostgreSQL 命令中使用了全部大写字母(在大多数文档中也是如此),您也可以用小写字母键入它们,这通常是我所做的。

输出数据

如果您想显示您的数据,请使用 SELECT

SELECT * FROM autorepairs ORDER BY date;

如果没有 ORDER BY 选项,行将以它们被输入的任何顺序显示。例如,这是我的汽车服务数据在我的终端中输出的选择

SELECT date, repairs FROM autorepairs ORDER BY date;

    date   |                             repairs                             
-----------+-----------------------------------------------------------------
2008-08-08 | oil change, air filter, spark plugs 
2011-09-30 | 35000 service, oil change, rotate tires/balance wheels 
2012-03-07 | repl battery 
2012-11-14 | 45000 maint, oil/filter 
2014-04-09 | 55000 maint, oil/filter, spark plugs, air/dust filters 
2014-04-21 | replace 4 tires 
2014-04-21 | wheel alignment 
2016-06-01 | 65000 mile service, oil change 
2017-05-16 | oil change, replce oil filt housing 
2017-05-26 | rotate tires 
2017-06-05 | air filter, cabin filter,spark plugs 
2017-06-05 | brake pads and rotors, flush brakes 
2017-08-11 | airbag recall 
2018-07-06 | oil/filter change, fuel filter, battery svc 
2018-07-06 | transmission fl, p steering fl, rear diff fl 
2019-07-22 | oil & filter change, brake fluid flush, front differential flush 
2019-08-20 | replace 4 tires 
2019-10-09 | replace passenger taillight bulb 
2019-10-25 | replace passenger taillight assembly
(19 rows)

要将其发送到文件,请使用以下命令更改输出

\o autorepairs.txt

然后再次运行 SELECT 命令。

退出 PostgreSQL

最后,要退出终端中的 PostgreSQL 模式,请键入

quit

或其简写版本

\q

虽然这只是对 PostgreSQL 的简要介绍,但我希望它表明,对于像这样简单的任务来说,使用数据库既不困难也不耗时。

接下来阅读什么
标签
Greg Pittman
Greg 是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 1960 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了人们学习更多知识的承诺,并最终做出贡献。他是 Scribus 团队的成员。

1 条评论

很棒的文章,我真的很喜欢 PostgreSQL。它实际上被许多商业应用程序用作其“开箱即用”安装的数据库。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© 2025 open-source.net.cn. All rights reserved.