如何在CentOS6上安装和使用PostgreSQL
状态:已弃用
本文介绍了不再受支持的 CentOS 版本。 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议您升级或迁移到受支持的 CentOS 版本。
原因:CentOS 6 已于 2020 年 11 月 30 日结束生命周期 (EOL) ,不再接收安全补丁或更新。 因此,不再维护本指南。
请参阅:本指南可能仍可用作参考,但可能不适用于其他 CentOS 版本。 如果可用,我们强烈建议使用为您正在使用的 CentOS 版本编写的指南。
以下 DigitalOcean 教程可能很有趣,因为它概述了在 CentOS 7 服务器上安装 PostgreSQL:
介绍
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 - 基础镜像列表=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:
[更新] name=CentOS-$releasever - 更新 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。
按住 Control 键单击或右键单击与最新版本的 postgres 和您的 CentOS 版本匹配的链接。 选择“复制链接地址”或任何可用的类似选项。
回到你的 Droplet 会话,切换到你的主目录。 输入 curl -O
然后粘贴下载链接:
cd ~ 卷曲 -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
我们可以看到,在这种情况下,对于 9.3 版本,所有包都有“93”。 我们要下载“-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');
如果您还记得,当我们创建表时,我们为“大小”列定义了可接受的值。 Postgres 检查该值是“小”、“正常”还是“大”。 如果我们尝试提供不同的值会发生什么?:
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[ X170X] 和 如何保护 postgres 。