什么是 PostgreSQL?
PostgreSQL 是一个使用 SQL 查询语言的数据库管理系统。 它是一个非常稳定且功能丰富的数据库系统,可用于将来自其他应用程序的数据存储在您的 VPS 上。
在本文中,我们将讨论如何在 postgreSQL 界面中创建和管理表。 您将学习如何正确配置表并使用它们来存储您的信息。
如何在 Ubuntu 上安装和登录 PostgreSQL
在本指南中,我们将在 Ubuntu 12.04 上安装 PostgreSQL,但它应该在大多数其他发行版的默认存储库中可用。
键入以下命令进行安装:
sudo apt-get update sudo apt-get install postgresql postgresql-contrib
安装后,创建一个新用户来管理我们将要创建的数据库:
sudo adduser postgres_user
登录到默认 PostgreSQL 用户(称为“postgres”)以创建数据库并将其分配给新用户:
sudo su - postgres psql
您将进入 PostgreSQL 命令提示符。
创建一个与您创建的系统用户匹配的新用户。 然后创建由该用户管理的数据库:
CREATE USER postgres_user WITH PASSWORD 'password'; CREATE DATABASE my_postgres_db OWNER postgres_user;
使用以下命令退出界面:
\q
退出默认的“postgres”用户帐户并使用以下命令登录到您创建的用户:
exit sudo su - postgres_user
使用以下命令登录到您创建的数据库:
psql my_postgres_db
我们现在准备学习表管理。
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地址
PostreSQL 列和表约束
列定义还可以具有为列中找到的数据类型提供规则的约束。 以下可用作数据类型后面的空格分隔值:
- 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”串行数据类型声明创建的序列。
如何在 PostgreSQL 中更改表数据
我们可以使用以下通用语法更改表的定义:
ALTER TABLE table_name Action_TO_Take;
例如,我们可以通过输入以下命令在“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,这些技能将很有帮助。