介绍
关系数据库管理系统是许多网站和应用程序的一个关键组件。 它们提供了一种结构化的方式来存储,组织和访问信息。
PostgreSQL的 ,或者Postgres,是一个关系型数据库管理系统,该系统提供了SQL查询语言的实现。 它是许多小型和大型项目的流行选择,并且具有符合标准并具有许多高级功能的优点,如可靠的事务和无读锁的并发性。
在本指南中,我们将演示如何在Ubuntu 16.04 VPS实例上安装Postgres,并讨论一些基本的使用方法。
安装
Ubuntu的默认存储库包含Postgres的包,所以我们可以通过安装这些容易apt
包装系统。
由于这是用我们的第一次apt
在这个环节,我们需要更新我们的本地包索引。 然后,我们可以安装Postgres的包和一个-contrib
,增加了一些附加的实用程序和功能包:
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
现在我们的软件已安装,我们可以了解它的工作原理,以及它可能与您可能使用的类似数据库管理系统不同。
使用PostgreSQL角色和数据库
默认情况下,Postgres使用一个称为“roles”的概念来处理身份验证和授权。 这些在某些方面类似于常规的Unix风格的帐户,但Postgres不区分用户和组,而更喜欢更灵活的术语“角色”。
在安装的Postgres被设置为使用身份认证,这意味着它的Postgres角色具有匹配的Unix / Linux系统帐户关联起来。 如果在Postgres中存在角色,则具有相同名称的Unix / Linux用户名将能够以该角色登录。
有几种方法利用此帐户访问Postgres。
切换到postgres帐户
安装过程中创建一个名为用户帐户postgres
与该默认的Postgres角色相关联。 为了使用Postgres,我们可以登录该帐户。
切换到postgres
键入您的服务器上的帐户:
sudo -i -u postgres
您现在可以通过键入以下内容立即访问Postgres提示:
psql
您将登录并能够立即与数据库管理系统交互。
键入以下命令退出PostgreSQL提示符:
\q
您现在应该回到postgres
Linux命令提示符。
访问Postgres提示但不切换帐户
您也可以运行,你想用命令postgres
直接与帐号sudo
。
例如,在最后一个例子中,我们只想得到一个Postgres提示符。 我们可以通过运行一个命令做到这一步psql
作为postgres
与用户sudo
是这样的:
sudo -u postgres psql
这将让您登录直接进入Postgres的无中介bash
之间的外壳。
同样,您可以键入以下内容退出交互式Postgres会话:
\q
创建新角色
目前,我们才有postgres
数据库中配置的角色。 我们可以从与命令行创建新角色createrole
命令。 该--interactive
标志将提示您输入必要的值。
如果您登录的postgres
帐户,您可以创建通过键入新用户:
createuser --interactive
相反,如果你喜欢使用sudo
每个命令,而不从您的账户的正常切换,可以键入:
sudo -u postgres createuser --interactive
该脚本将提示您一些选择,并根据您的响应,执行正确的Postgres命令来创建一个用户您的规格。
OutputEnter 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
OutputYou 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)
);
正如你所看到的,我们给表一个名字,然后定义我们想要的列,以及字段数据的列类型和最大长度。 我们还可以选择为每个列添加表约束。
您可以了解更多关于如何创建和管理的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_id
和install_date
),我们没有给一个字段长度。 这是因为一些列类型不需要设置长度,因为长度由类型隐含。
然后,我们给出了设备的列type
和color
,其中每一个可以不为空。 我们创建了一个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', '2014-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');
您应该在输入数据时小心,以避免几个常见的挂断。 首先,请记住,列名不应该被引用,但您输入的列值确实需要引号。
要记住的另一件事是,我们没有为输入值equip_id
列。 这是因为每当创建表中的新行时都会自动生成。
然后,我们可以通过键入以下内容获取我们添加的信息:
SELECT * FROM playground;
Output 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;
Output 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;
Output 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设置一个绘画作业:
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)
如您所见,我们的幻灯片现在注册为红色。
结论
你现在在你的Ubuntu 16.04服务器上设置PostgreSQL。 但是,仍然有很多东西要学用Postgres的。 这里有一些指南,涵盖如何使用Postgres: