postgresql入门
每个人都有收集到数据库中有用的东西。 即使您沉迷于保存文书工作或电子文件,它们也会变得很麻烦。 纸质文档可能会丢失或完全混乱,并且您需要在电子文件中访问的信息可能会埋在信息的段落和页面的深处。
当我练习医学时,我使用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
您可能会收到类似以下错误消息: 无法切换到/ 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使用数字数据类型。 括号中的数字表示最多六个数字,其中两个为小数。 首先,我尝试了实际的数据类型,它是一个浮点数。 真正的数据类型问题出现在使用WHERE子句的更高级的命令中,例如WHERE cost = 0或任何其他特定数字。 由于实际值有些不精确,因此特定数字永远不会匹配任何内容。
输入数据
接下来,您可以使用INSERT INTO命令添加一些数据(在PostgreSQL中称为row ):
INSERT INTO autorepairs VALUES ('2017-08-11', 'airbag recall', 'dealer', 0);
请注意,括号构成了这些值的容器,这些值必须以正确的顺序排列,并用逗号分隔,并在命令末尾加分号。 date和varchar(80)数据类型的值必须用单引号引起来,而数字值之类的数字则不能。 作为反馈,您应该看到:
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简要介绍,但我希望它能证明使用数据库完成像这样的简单任务既不困难也不费时间。
翻译自: https://opensource.com/article/19/11/getting-started-postgresql
postgresql入门