每个人都有一些东西可以收集到数据库中,这将非常有用。即使您痴迷于保存纸质文件或电子文件,它们也可能变得很麻烦。纸质文件可能会丢失或完全杂乱无章,而您需要在电子文件中访问的信息可能埋藏在段落和页面的深处。
当我还在行医时,我使用 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 来说是可以的。第二个和第三个变量 repairs 和 location 的数据类型都是 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);
请注意,括号形成了一个值的容器,这些值必须按正确的顺序排列,用逗号分隔,并且命令末尾带有分号。date 和 varchar(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 的简要介绍,但我希望它表明,对于像这样简单的任务来说,使用数据库既不困难也不耗时。
1 条评论