PostgreSQL 入门


PostgreSQL 入门

文章插图
 
安装、设置、创建和开始使用 PostgreSQL 数据库 。-- Greg Pittman(作者)
每个人或许都有需要在数据库中保存的东西 。即使你执着于使用纸质文件或电子文件,它们也会变得很麻烦 。纸质文档可能会丢失或混乱,你需要访问的电子信息可能会隐藏在段落和页面的深处 。
在我从事医学工作的时候,我使用 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.servicesystemctl enable postgresql.service第一个命令为当前会话启动 PostgreSQL(如果你关闭机器,那么 PostgreSQL 也将关闭) 。第二个命令使 PostgreSQL 在随后的重启中自动启动 。
创建用户【PostgreSQL 入门】PostgreSQL 正在运行,但是你仍然不能使用它,因为你还没有用户 。为此,你需要切换到特殊用户 postgres 。当你仍以 root 身份运行时,输入:
su postgres由于你是以 root 的身份执行此操作的,因此无需输入密码 。root 用户可以在不知道密码的情况下以任何用户身份操作;这就是使其强大而危险的原因之一 。
现在你就是 postgres 了,请运行下面两个命令,如下所示创建用户(创建用户 gregp):
createuser gregpcreatedb gregp你可能会看到错误消息,如:Could not switch to /home/gregp 。这只是意味着用户 postgres不能访问该目录 。尽管如此,你的用户和数据库已创建 。接下来,输入 exit 并按回车两次,这样就回到了原来的用户下(root) 。
设置数据库要开始使用 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 值有些不精确,因此特定数字将永远不会匹配 。


推荐阅读