什么是 PostgreSQL?
PostgreSQL 是一个使用 SQL 查询语言的数据库管理系统。它是一个非常稳定且功能丰富的数据库系统,可用于存储 VPS 上其他应用程序的数据。
在本文中,我们将讨论如何在 PostgreSQL 接口中创建和管理表。您将学习如何正确配置表并使用它们来存储信息。
如何在 Ubuntu 上安装并登录 PostgreSQL
在本指南中,我们将在 Ubuntu 12.04 上安装 PostgreSQL,但它应该在大多数其他发行版的默认存储库中都可以找到。
输入以下命令进行安装:
sudo apt-get update sudo apt-get install postgresql postgresql-contrib
安装完成后,创建一个新用户来管理我们将要创建的数据库:
sudo adduser <span class="highlight">postgres_user</span>
登录到默认的 PostgreSQL 用户(称为 “postgres”)以创建一个数据库并将其分配给新用户:
sudo su - postgres psql
您将进入 PostgreSQL 命令提示符。
创建一个与您创建的系统用户匹配的新用户。然后创建由该用户管理的数据库:
CREATE USER <span class="highlight">postgres_user</span> WITH PASSWORD '<span class="highlight">password</span>'; CREATE DATABASE <span class="highlight">my_postgres_db</span> OWNER <span class="highlight">postgres_user</span>;
使用以下命令退出接口:
\q
退出默认的 “postgres” 用户帐户,然后使用以下命令登录到您创建的用户:
exit sudo su - <span class="highlight">postgres_user</span>
使用以下命令登录到您创建的数据库:
psql <span class="highlight">my_postgres_db</span>
现在我们已经准备好学习关于表管理的知识。
PostgreSQL 中的表创建语法
我们的数据库还没有任何表。您可以使用以下命令询问 PostgreSQL 给出可用表的列表:
\d
No relations found.
我们可以通过遵循以下语法创建新表:
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;
括号后面直到分号的部分是一个可选的结构,用于从现有表中继承所有列,以及在早期定义中列出的列。
括号内部分为两部分:列定义和表约束。
PostgreSQL 列和表定义
列定义遵循以下语法模式:
column_name data_type (optional_data_length_restriction) column_constraints
列名应该是不言自明的。
PostgreSQL 数据类型
数据类型可以是以下任何一种:
- boolean: 使用 “boolean” 或 “bool” 来声明真或假值。
- 字符值:
- char: 保存单个字符
- char (#): 保存 # 个字符。空格将被插入以填充任何额外的空间。
- varchar (#): 最多保存 # 个字符。可以包含更少。
- 整数值:
- smallint: -32768 到 32767 之间的整数。
- int: -214783648 到 214783647 之间的整数。
- serial: 自动填充的整数。
- 浮点数值:
- float (#): 至少具有 # 个精度点的浮点数。
- real: 8 字节浮点数。
- numeric (#,after_dec): 具有 # 位数和小数点后 after_dec 位数的实数。
- 日期和时间值:
- date: 存储日期值
- time: 存储时间值
- timestamp: 存储日期和时间值
- timestamptz: 存储包括时区数据的时间戳
- interval: 存储两个时间戳值之间的差异
- 几何数据:
- point: 存储定义点的一对坐标
- line: 存储映射出一条线的一组点
- lseg: 存储定义线段的数据
- box: 存储定义矩形的数据
- polygon: 存储定义任何封闭空间的数据
- 设备规格:
- inet: 存储 IP 地址
- macaddr: 存储设备 MAC 地址
PostgreSQL 列和表约束
列定义还可以具有约束,为列中找到的数据类型提供规则。以下内容可以作为数据类型后面的空格分隔值使用:
- NOT NULL: 列不能有空值
- UNIQUE: 列值对于任何记录都不能相同。Null 始终被视为唯一值
- PRIMARY KEY: 上述两个约束的组合。每个表只能使用一次
- CHECK: 确保列中的值满足条件
- REFERENCES: 值必须存在于另一个表中的列中
在定义列之后,可以声明表范围约束。表范围约束可以是 UNIQUE、PRIMARY KEY、CHECK 或 REFERENCES。
如何在 PostgreSQL 中创建表
让我们创建一个测试表进行练习。我们将创建一个名为 “pg_equipment” 的表,该表定义了各种游乐场设备。输入以下表定义:
CREATE TABLE pg_equipment ( 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 );
NOTICE: CREATE TABLE will create implicit sequence "pg_equipment_equip_id_seq" for serial column "pg_equipment.equip_id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "pg_equipment_pkey" for table "pg_equipment" CREATE TABLE
我们可以通过在提示符中键入 “\d” 来查看我们的新表:
\d
List of relations Schema | Name | Type | Owner --------+---------------------------+----------+--------------- public | pg_equipment | table | postgres_user public | pg_equipment_equip_id_seq | sequence | postgres_user (2 rows)
表被列出,以及由 “equip_id” serial 数据类型声明创建的序列。
如何在 PostgreSQL 中更改表数据
我们可以使用以下一般语法更改表的定义:
ALTER TABLE table_name <em>Action_TO_Take</em>;
例如,我们可以通过输入以下命令向我们的 “pg_equipment” 表添加列:
ALTER TABLE pg_equipment ADD COLUMN functioning bool;
ALTER TABLE
我们可以通过输入以下命令查看额外的列:
\d pg_equipment
Column | Type | Modifiers --------------+-----------------------+----------------------------------------------------------------- equip_id | integer | not null default nextval('pg_equipment_equip_id_seq'::regclass) type | character varying(50) | not null color | character varying(25) | not null location | character varying(25) | install_date | date | functioning | boolean | . . .
要添加指定 “设备应被视为工作,除非另有说明” 的默认值,执行以下命令:
ALTER TABLE pg_equipment ALTER COLUMN functioning SET DEFAULT 'true';
如果我们还想确保该值也不为空,可以执行以下命令:
ALTER TABLE pg_equipment ALTER COLUMN functioning SET NOT NULL;
要重命名列,使用以下语法:
ALTER TABLE pg_equipment RENAME COLUMN functioning TO working_order;
要删除我们刚刚创建的列,输入以下命令:
ALTER TABLE pg_equipment DROP COLUMN working_order;
我们可以使用以下命令重命名整个表:
ALTER TABLE pg_equipment RENAME TO playground_equip;
在 PostgreSQL 中删除表
我们可以通过输入以下命令删除我们创建的表:
DROP TABLE playground_equip;
DROP TABLE
如果我们对不存在的表给出该命令,将收到以下错误:
ERROR: table "playground_equip" does not exist
为了避免此错误,我们可以告诉 PostgreSQL 如果存在则删除表,并无论如何都返回成功。我们可以通过输入以下命令来实现:
DROP TABLE IF EXISTS playground_equip;
NOTICE: table "playground_equip" does not exist, skipping DROP TABLE
这次,它告诉我们未找到表,但继续而不是抛出错误。
结论
您现在应该已经了解足够的知识来在 PostgreSQL 中创建和管理简单的表。如果您正在管理来自其他应用程序的数据,或者正在学习如何从命令行控制 PostgreSQL,这些技能将会很有帮助。