如何在Ubuntu 16.04上安装和使用PostgreSQL

介绍

关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。

PostgreSQL或Postgres是一个关系数据库管理系统,它提供SQL查询语言的实现。它是许多小型和大型项目的流行选择,并且具有符合标准并具有许多高级功能(如可靠事务和并发性而无需读锁定)的优点。

在本指南中,我们将演示如何在Ubuntu 16.04 VPS实例上安装Postgres,并介绍一些使用它的基本方法。

安装

你需要一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

Ubuntu的默认存储库包含Postgres软件包,因此我们可以使用apt打包系统轻松安装这些软件包。

由于这是我们第一次apt在此会话中使用,我们需要刷新本地包索引。然后我们可以安装Postgres包和一个添加一些额外实用程序和功能的-contrib包:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

现在我们的软件已经安装完毕,我们可以了解它的工作原理以及它与您可能使用的类似数据库管理系统的不同之处。

使用PostgreSQL角色和数据库

默认情况下,Postgres使用称为“角色”的概念来处理身份验证和授权。在某些方面,这些类似于常规的Unix风格帐户,但Postgres不区分用户和组,而是更喜欢更灵活的术语“角色”。

安装后Postgres设置为使用ident身份验证,这意味着它将Postgres角色与匹配的Unix / Linux系统帐户相关联。如果Postgres中存在角色,则具有相同名称的Unix / Linux用户名将能够以该角色登录。

有几种方法可以使用此帐户访问Postgres。

切换到postgres帐户

安装过程创建了一个名为postgres与默认Postgres角色关联的用户帐户。为了使用Postgres,我们可以登录该帐户。

键入以下内容切换到服务器上的postgres帐户:

sudo -i -u postgres

您现在可以通过键入以下内容立即访问Postgres提示:

psql

您将立即登录并能够与数据库管理系统进行交互。

键入以下命令退出PostgreSQL提示符:

\q

您现在应该回到postgresLinux命令提示符。

在不切换帐户的情况下访问Postgres提示

您也可以直接使用有sudo权限的postgres帐户运行您想要的命令。

例如,在最后一个示例中,我们只想进入Postgres提示符。我们可以通过像这样运行单个命令psql作为有sudo权限postgres用户一步完成:

sudo -u postgres psql

这将直接登录到Postgres,中间没有中间bashshell。

同样,您可以通过键入以下内容退出交互式Postgres会话:

\q

创建一个新角色

目前,我们只是在数据库中配置了postgres角色。我们可以使用createrole命令从命令行创建新角色。该--interactive标志将提示您输入必要的值。

如果您以postgres帐户登录,则可以通过键入以下内容来创建新用户:

createuser --interactive

相反,如果您希望在不切换普通帐户的情况下使用每个sudo命令,则可以键入:

sudo -u postgres createuser --interactive

该脚本将提示您一些选择,并根据您的响应执行正确的Postgres命令,以根据您的规范创建用户。

Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

您可以通过传递一些额外的标志来获得更多控制。查看man页面查看选项:

man createuser

创建一个新数据库

默认情况下,Postgres身份验证系统的另一个假设是,将存在一个与用于登录的角色同名的数据库,该角色可以访问该角色。

因此,如果在最后一节中,我们创建了一个名为sammy的用户,那么该角色将尝试连接到默认情况下也会调用的sammy数据库。您可以使用该createdb命令创建适当的数据库。

如果您以postgres帐户登录,则可以键入以下内容:

createdb sammy

相反,如果您希望在不切换普通帐户的情况下使用sudo的每个命令,则可以键入:

sudo -u postgres createdb sammy

使用新角色打开Postgres提示符

要使用ident基于身份验证的登录,您需要一个与Postgres角色和数据库同名的Linux用户。

如果您没有匹配的Linux用户,可以使用该adduser命令创建一个。您必须从具有sudo权限的帐户(未以postgres用户身份登录)执行此操作:

sudo adduser sammy

获得适当的帐户后,您可以通过键入以下内容切换并连接到数据库:

sudo -i -u sammy
psql

或者,您可以内联执行此操作:

sudo -u sammy psql

假设所有组件都已正确配置,您将自动登录。

如果您希望用户连接到其他数据库,可以通过指定数据库来执行此操作:

psql -d postgres

登录后,您可以通过键入以下内容来检查当前的连接信息:

\conninfo
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

如果要连接到非默认数据库或非默认用户,这可能很有用。

创建和删除表

既然您已经知道如何连接到PostgreSQL数据库系统,我们就可以了解如何完成一些基本任务。

首先,我们可以创建一个表来存储一些数据。让我们创建一个描述游乐场设备的表格。

此命令的基本语法如下:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

如您所见,我们为表提供一个名称,然后定义我们想要的列,以及字段数据的列类型和最大长度。我们还可以选择为每列添加表约束。

出于我们的目的,我们将创建一个这样的简单表:

CREATE TABLE playground (
    equip_id serial PRIMARY KEY,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
    install_date date
);

我们制作了一个操场桌,可以清点我们拥有的设备。这从serial类型的设备ID开始。此数据类型是自动递增整数。我们给这个列赋予了primary key约束,这意味着值必须是唯一的而不是null。

对于我们的两个列(equip_idinstall_date),我们没有给出字段长度。这是因为某些列类型不需要设置长度,因为类型隐含了长度。

然后,我们给出了设备列typecolor,其中的每一个不能为空。我们创建一个location列并创建一个约束,要求该值为八个可能值之一。最后一列是日期列,记录我们安装设备的日期。

我们可以通过输入以下内容来查看新表:

\d
                  List of relations
 Schema |          Name           |   Type   | Owner 
--------+-------------------------+----------+-------
 public | playground              | table    | sammy
 public | playground_equip_id_seq | sequence | sammy
(2 rows)

我们的操场上表是在这里,但我们也有一些所谓playground_equip_id_seqsequence的类型。这是我们为equip_id列提供的serial类型的表示。这将跟踪序列中的下一个数字,并自动为此类型的列创建。

如果您只想查看没有序列的表,可以键入:

\dt
          List of relations
 Schema |    Name    | Type  | Owner 
--------+------------+-------+-------
 public | playground | table | sammy
(1 row)

在表中添加,查询和删除数据

现在我们有了一个表,我们可以在其中插入一些数据。

让我们添加一张幻灯片和一个秋千。我们通过调用我们想要添加的表,命名列然后为每列提供数据来完成此操作。我们的幻灯片和秋千可以添加如下:

INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');

输入数据时应该小心,以避免一些常见的挂断。首先,请记住不应引用列名,但是您输入的列确实需要引号。

要记住的另一件事是我们不输入equip_id列的值。这是因为只要创建表中的新行,就会自动生成此项。

然后我们可以通过输入以下内容来获取我们添加的信息:

SELECT * FROM playground;
 equip_id | type  | color  | location  | install_date 
----------+-------+--------+-----------+--------------
        1 | slide | blue   | south     | 2014-04-28
        2 | swing | yellow | northwest | 2010-08-16
(2 rows)

在这里,您可以看到我们equip_id已成功填写,并且所有其他数据都已正确组织。

如果操场上的幻灯片断开并且我们必须将其删除,我们还可以通过键入以下内容从表中删除行:

DELETE FROM playground WHERE type = 'slide';

如果我们再次查询我们的表格,我们将看到我们的幻灯片不再是表格的一部分:

SELECT * FROM playground;
 equip_id | type  | color  | location  | install_date 
----------+-------+--------+-----------+--------------
        2 | swing | yellow | northwest | 2010-08-16
(1 row)

如何从表中添加和删除列

如果我们想在创建表之后修改表以添加其他列,我们可以轻松地执行此操作。

我们可以通过输入以下内容添加一列来显示每件设备的上次维护访问:

ALTER TABLE playground ADD last_maint date;

如果再次查看表信息,您将看到添加了新列(但未输入任何数据):

SELECT * FROM playground;
 equip_id | type  | color  | location  | install_date | last_maint 
----------+-------+--------+-----------+--------------+------------
        2 | swing | yellow | northwest | 2010-08-16   | 
(1 row)

我们可以轻松删除列。如果我们发现我们的工作人员使用单独的工具来跟踪维护历史记录,我们可以通过键入以下内容来删除此列:

ALTER TABLE playground DROP last_maint;

如何更新表中的数据

我们知道如何向表中添加记录以及如何删除它们,但我们还没有介绍如何修改现有条目。

您可以通过查询所需的记录并将列设置为您要使用的值来更新现有条目的值。我们可以查询“swing”记录(这将匹配我们表中的每个 swing)并将其颜色更改为“red”。如果我们给秋千组画一个绘画工作,这可能很有用:

UPDATE playground SET color = 'red' WHERE type = 'swing';

我们可以通过再次查询我们的数据来验证操作是否成功:

SELECT * FROM playground;
 equip_id | type  | color | location  | install_date 
----------+-------+-------+-----------+--------------
        2 | swing | red   | northwest | 2010-08-16
(1 row)

如您所见,我们的幻灯片现已注册为红色。

结论

您现在在Ubuntu 16.04服务器上设置了PostgreSQL。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Install and Use PostgreSQL on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小特工作室

Navi.Soft31.代码生成器(含下载地址)

1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码...

23990
来自专栏云计算教程系列

如何在CentOS 7上安装和使用PostgreSQL

关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。

24410
来自专栏王磊的博客

golang操作文件

1、读取文件信息: /* 读取文件信息 */ func readFile(path string) string { fi, err := os.Open(p...

28250
来自专栏散尽浮华

Mysql优化系列(0)--总结性梳理

对于一个网站来说,在运行很长一段时间后,数据库瓶颈问题会越来越暴露出来。作为运维人员,对数据库做必要的优化十分重要! 下面总结以往查阅到的以及自己工作中的一些优...

22780
来自专栏PHP在线

mysql 性能优化方案 (转)

网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频...

43660
来自专栏北京马哥教育

SQLite这么娇小可爱,不多了解点都不行啊

简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数...

38680
来自专栏北京马哥教育

MySQL 数据库上线后根据 status 状态优化

马哥linux运维 | 最专业的linux培训机构 ---- 网上有很多的文章教怎么配置mysql服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文...

33160
来自专栏深度学习之tensorflow实战篇

MYSQL数据导出与导入,secure_file_priv参数设置

MySQL 报错 [Code: 1290, SQL State: HY000] The MySQL server is running with the –...

65850
来自专栏吴伟祥

分布式锁的几种实现方式~ 转

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一...

42210
来自专栏小俊博客

Linux解决内存不足-添加SWAP交换分区

53720

扫码关注云+社区

领取腾讯云代金券