简介
PostgreSQL,通常被称为 “postgres”,是一种流行的数据库管理系统,它使用 SQL 查询语言来操作数据。
在本指南中,我们将介绍如何在 CentOS VPS 上安装和使用 postgres。
如何安装 PostgreSQL
尽管 CentOS 默认仓库中包含 postgres 软件包,但我们将使用 postgres 项目自己提供的软件包。
这样可以确保我们可以访问到最新版本的软件,而无需从源代码安装。
排除 CentOS 的 Postgres 软件包
在安装 postgres 之前,我们必须排除 CentOS 版本的 postgres,以便从项目网站获取最新版本。
在文本编辑器中打开 CentOS 仓库配置文件:
nano /etc/yum.repos.d/CentOS-Base.repo
在 [base]
部分的底部,添加一行排除 postgres 软件包:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*
在 [updates]
部分的底部也添加相同的行,以防止 yum 从默认仓库更新 postgres:
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*
添加 Postgres 仓库
现在,我们已经告诉 yum 不再使用默认仓库中的 postgres 软件包。
我们需要为其提供一个替代方案。我们将使用 postgres 项目网站提供的软件包。
前往该网站,找到适用于您的 CentOS 版本的最新版本的 postgres。
在链接上按下 Ctrl 键或右键,选择 “复制链接地址” 或类似的选项。
!Postgres 复制最新版本的位置
回到您的 droplet 会话,切换到您的主目录。输入 curl -O
,然后粘贴下载链接:
cd ~
curl -O http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
通过输入以下命令安装刚刚下载的软件包:
rpm -ivh pgdg*
这将允许您的系统从项目网站获取 postgres 软件包。
现在我们可以这样做以获取最新版本。这些软件包包含版本编号,因此您需要搜索以查看正在使用的版本:
yum list postgres*
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.linux.duke.edu * extras: mirror.linux.duke.edu * updates: mirrors.kernel.org Installed Packages postgresql93.x86_64 9.3.1-1PGDG.rhel6 @pgdg93 postgresql93-libs.x86_64 9.3.1-1PGDG.rhel6 @pgdg93 postgresql93-server.x86_64 9.3.1-1PGDG.rhel6 @pgdg93 Available Packages postgresql93-contrib.x86_64 9.3.1-1PGDG.rhel6 pgdg93 postgresql93-debuginfo.x86_64 9.3.1-1PGDG.rhel6 pgdg93
我们可以看到,在这种情况下,所有软件包的版本都是 “93”,表示版本为 9.3。我们需要下载 “-server” 软件包:
yum install postgresql93-server
在本指南的其余部分中,将 “93” 更改为您系统当前的 postgres 版本。
初始化数据库环境
您可以通过输入以下命令来初始化数据库环境:
service postgresql-9.3 initdb
然后,我们将配置它在启动时启动,并启动软件:
chkconfig postgresql-9.3 on service postgresql-9.3 start
现在我们已经准备好开始使用 postgres。
如何登录到Postgres数据库
默认情况下,Postgres创建了一个名为postgres
的用户和一个数据库。
默认的安全方案假定postgres用户只能被需要访问的人访问。这可以通过设置sudo规则来控制。
我们通过一个名为psql
的接口与postgres数据库软件进行交互。它提供了一个提示符,我们可以在其中操作和查询数据。
现在,像这样登录到postgres用户:
su - postgres
你的提示符会改变。现在你可以通过输入以下命令连接到与你的用户名匹配的数据库:
psql
你的提示符会再次改变,这次是为了指示你正在与postgres数据库进行交互。
如果你需要退出这个接口,你可以随时输入以下命令:
\q
之后,要返回到root用户shell,你可以输入:
exit
一些有用的psql命令
以下是一些可以帮助你了解当前环境的命令:
- ?: 获取psql命令的完整列表,包括这里未列出的命令。
- \h: 获取SQL命令的帮助。你可以在其后跟上一个特定的命令,以获取语法的帮助。
- \q: 退出psql程序并返回Linux提示符。
- \d: 列出当前数据库中可用的表、视图和序列。
- \du: 列出可用角色
- \dp: 列出访问权限
- \dt: 列出表
- \l: 列出数据库
- \c: 连接到不同的数据库。在其后跟上数据库名称。
- \password: 更改接下来的用户名的密码。
- \conninfo: 获取关于当前数据库和连接的信息。
创建一个Postgres表
我们可以使用以下语法在postgres中创建表:
CREATE TABLE new_table_name (
table_column_title TYPE_OF_DATA column_constraints,
next_column_title TYPE_OF_DATA column_constraints,
table_constraint
table_constraint
) INHERITS existing_table_to_inherit_from;
我们将创建一个名为“popsicles”的表,用于存储我们的冰棒品种以及一些关于它们的信息。
CREATE TABLE popsicles ( pop_id serial PRIMARY KEY, flavor varchar (50) NOT NULL, amount int NOT NULL, size varchar (10) check (size in ('small', 'normal', 'large')) );
现在我们可以使用\dt
命令来查看表:
\dt
List of relations Schema | Name | Type | Owner --------+-----------+-------+---------- public | popsicles | table | postgres (1 row)
要查看我们刚刚定义的列和数据结构,可以输入以下命令:
\d popsicles
Table "public.popsicles" Column | Type | Modifiers --------+-----------------------+------------------------------------ ------------------------ pop_id | integer | not null default nextval('popsicles _pop_id_seq'::regclass) flavor | character varying(50) | not null amount | integer | not null size | character varying(10) | . . .
向Postgres表中插入数据
现在我们的数据库中有一个表,但里面还没有数据。我们可以使用insert
命令来填充它。
我们输入INSERT INTO
,后跟表名。然后,我们在一对括号内输入以逗号分隔的列名列表。然后,我们输入VALUES
,后跟包含与列名对应的以逗号分隔的值列表的第二组括号。
让我们现在试一下。我们将向表中插入一些葡萄冰棒:
INSERT INTO popsicles (flavor, amount, size) VALUES ('grape', 10, 'normal');
INSERT 0 1
INSERT 0 1
表示我们的命令已成功接受。关于这个命令的一些要注意的事情是,值列表中的单词在单引号(')内,命令以分号(;)结束。这两点都很重要。
另一件要注意的事情是,我们没有设置pop_id
列。这是因为我们将其定义为主键。这个列必须对每个条目具有唯一值,因此postgres将自动为我们创建的每条记录分配下一个可用值。
让我们填入更多数据,这样我们就有一个更有用的表:
INSERT INTO popsicles (flavor, amount, size) VALUES ('orange', 8, 'small'); INSERT INTO popsicles (flavor, amount, size) VALUES ('fudge', 20, 'large'); INSERT INTO popsicles (flavor, amount, size) VALUES ('eclair', 14, 'normal'); INSERT INTO popsicles (flavor, amount, size) VALUES ('rainbow', 4, 'small');
如果你还记得,当我们创建表时,我们定义了“size”列的可接受值。Postgres检查该值是否为“small”、“normal”或“large”。如果我们尝试提供一个不同的值会发生什么呢?:
INSERT INTO popsicles (flavor, amount, size) VALUES ('lime', 6, 'huge');
ERROR: new row for relation "popsicles" violates check constraint "popsicles_size_check" DETAIL: Failing row contains (6, lime, 6, huge).
正如你所看到的,postgres已验证我们输入了正确的数据。它拒绝了我们最新的冰棒,因为它没有我们为大小定义的值之一。
从 Postgres 表中选择数据
我们可以使用 select
命令来查询我们的新表中的数据。select
命令会返回符合指定条件的表中数据。
要返回表中的所有信息,我们可以使用星号(*),它是一个特殊符号,表示“匹配所有内容”:
SELECT * FROM popsicles;
pop_id | flavor | amount | size --------+---------+--------+-------- 1 | grape | 10 | normal 2 | orange | 8 | small 3 | fudge | 20 | large 4 | eclair | 14 | normal 5 | rainbow | 4 | small (5 rows)
我们可以通过替换星号为我们想要的列来按列进行选择:
SELECT flavor, amount FROM popsicles;
flavor | amount ---------+-------- grape | 10 orange | 8 fudge | 20 eclair | 14 rainbow | 4 (5 rows)
如果我们想要筛选只显示特定结果,我们可以在末尾添加 where
过滤器:
SELECT * FROM popsicles WHERE amount <= 10;
pop_id | flavor | amount | size --------+---------+--------+-------- 1 | grape | 10 | normal 2 | orange | 8 | small 5 | rainbow | 4 | small (3 rows)
结论
您现在应该已经在系统上安装了 postgres,并且对其基本用法有了很好的掌握。
在处理 postgres 时还有许多其他内容需要学习。您可以探索我们的其他文章,了解如何管理表、如何创建查询、如何管理权限、如何备份 postgres,以及如何保护 postgres。