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

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

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

本指南演示了如何在Ubuntu 18.04 VPS实例上安装Postgres,并提供了有关基本数据库管理的说明。

先决条件

为了跟随本教程,您将需要一个Ubuntu 18.04服务器,该服务器已通过遵循我们的初始服务器设置Ubuntu 18.04指南进行配置。完成此先决条件教程后,您的服务器应该有一个非root用户,具有sudo权限和基本防火墙。

安装PostgreSQL

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

由于这是您第一次apt在此会话中使用,请刷新本地包裹索引。然后,安装Postgres软件包以及-contrib增加一些附加实用程序和功能的软件包:

sudo apt update
sudo apt 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提示符中,从这里您可以立即与数据库管理系统进行交互。

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

\q

这会将您带回到postgresLinux命令提示符。

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

你也可以直接用postgres账户运行你想要的命令sudo

例如,在最后一个例子中,您被指示通过首先切换到postgres用户然后运行psql以打开Postgres提示符来访问Postgres提示符。您可以通过psqlpostgres用户sudo一样运行单个命令来完成此操作,如下所示:

sudo -u postgres psql

这会将你直接登录到Postgres中,而不需要中间的bashshell。

同样,您可以键入以下命令退出交互式Postgres会话:

\q

许多用例需要多个Postgres角色。继续阅读以了解如何配置这些。

创建一个新的角色

目前,您只需在数据库中配置postgres角色。您可以使用命令从命令行创建新角色createrole。该--interactive标志会提示您输入新角色的名称,并询问它是否应具有超级用户权限。

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

createuser --interactive

相反,如果您宁愿使用sudo每个命令而不从普通帐户切换,请键入:

sudo -u postgres createuser --interactive

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

Output

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

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

man createuser

你现在安装的Postgres有一个新用户,但你还没有添加任何数据库。下一节将介绍这一过程。

创建一个新的数据库

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

这意味着,如果您在上一节中创建的用户名为sammy,则该角色将尝试连接到默认情况下也称为“sammy”的数据库。您可以使用该createdb命令创建适当的数据库。

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

createdb sammy

相反,如果您宁愿使用sudo每个命令而无需从普通帐户中切换,则可以键入:

sudo -u postgres createdb sammy

这种灵活性可根据需要为创建数据库提供多种路径

以新的角色打开Postgres提示

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

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

sudo adduser sammy

一旦这个新帐户可用,您可以通过键入以下命令切换并连接到数据库:

sudo -i -u sammy
psql

或者,你可以这样做内联:

sudo -u sammy psql

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

如果你想让你的用户连接到不同的数据库,你可以通过像这样指定数据库来实现:

psql -d postgres</span

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

\conninfo

Output

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

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

创建和删除表格

现在您已经知道如何连接到PostgreSQL数据库系统,您可以学习一些基本的Postgres管理任务。

首先,创建一个表来存储一些数据。作为一个例子,描述一些游乐场设备的表格。

该命令的基本语法如下所示:

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

正如你所看到的,这些命令为表提供了一个名称,然后定义列以及列类型和字段数据的最大长度。您也可以选择为每列添加表约束。

您可以这里了解更多关于如何在Postgres中创建和管理表格的信息。

为了演示目的,请创建一个如下所示的简单表格:

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);

这些命令将创建一个库存游乐场设备的表格。这从一个设备ID开始serial。此数据类型是一个自动递增整数。你也给了这个列的约束,primary key这意味着这些值必须是唯一的而不是空的。

对于两列(equip_idinstall_date),这些命令不指定字段长度。这是因为某些列类型不需要设置长度,因为该类型隐含了长度。

接下来的两个命令的设备创建列typecolor分别,其中每一个可以不为空。这些命令之后创建一个location列并创建一个约束条件,要求该值为八个可能的值之一。最后一个命令创建一个日期列,记录您安装设备的日期。

您可以输入以下内容来查看新表:

\d

Output

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

你的游乐场桌子在这里,但也有一些叫做playground_equip_id_seq这种类型的东西sequence。这是serial您为equip_id专栏提供的类型的表示形式。这会跟踪序列中的下一个数字,并为此类型的列自动创建。

如果你想只看到没有序列的表格,你可以输入:

\dt

Output

          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', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

输入数据时应小心,以避免几次常见的挂断。例如,不要将列名换成引号,但输入的列值需要引号。

另外要记住的是,您不输入equip_id列的值。这是因为无论何时创建表中的新行时都会自动生成这些数据。

通过输入以下内容检索您添加的信息:

SELECT * FROM playground;

Output

 equip_id | type  | color  | location  | install_date ----------+-------+--------+-----------+--------------        1 | slide | blue   | south     | 2017-04-28        2 | swing | yellow | northwest | 2018-08-16(2 rows)

在这里,你可以看到你的equip_id成功填写以及你所有其他数据的组织都是正确的。

如果操场上的幻灯片发生断裂并且您必须将其删除,则还可以键入以下内容以从表格中删除该行:

DELETE FROM playground WHERE type = 'slide';

再次查询表格:

SELECT * FROM playground;

Output

 equip_id | type  | color  | location  | install_date ----------+-------+--------+-----------+--------------        2 | swing | yellow | northwest | 2018-08-16(1 row)

您注意到您的幻灯片不再是表格的一部分。

从表中添加和删除列

创建表格后,可以对其进行修改以相对简单地添加或删除列。通过输入以下内容添加一列以显示每件设备的上次维护访问:

ALTER TABLE playground ADD last_maint date;

如果再次查看表格信息,则会看到已添加新列(但未输入任何数据):

SELECT * FROM playground;

Output

 equip_id | type  | color  | location  | install_date | last_maint ----------+-------+--------+-----------+--------------+------------        2 | swing | yellow | northwest | 2018-08-16   | (1 row)

删除列同样简单。如果您发现工作人员使用单独的工具来跟踪维护历史记录,则可以通过键入以下内容来删除该列:

ALTER TABLE playground DROP last_maint;

这将删除该last_maint列及其中找到的任何值,但保留所有其他数据不变。

更新表中的数据

到目前为止,您已经学会了如何向表中添加记录以及如何删除它们,但本教程尚未介绍如何修改现有条目。

您可以通过查询您想要的记录并将列设置为您希望使用的值来更新现有条目的值。您可以查询“摆动”记录(这将匹配表格中的每个摆动)并将其颜色更改为“红色”。如果你给挥杆设置一个油漆工作,这可能是有用的:

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

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

SELECT * FROM playground;

Output

 equip_id | type  | color | location  | install_date ----------+-------+-------+-----------+--------------        2 | swing | red   | northwest | 2010-08-16(1 row)

正如你所看到的,你的幻灯片现在被注册为红色。

转载自:https://huur.cn/course/yw/1591.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容