前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >想熟悉PostgreSQL?这篇就够了

想熟悉PostgreSQL?这篇就够了

原创
作者头像
angel_郁
发布于 2018-07-20 09:17:00
发布于 2018-07-20 09:17:00
3.2K00
代码可运行
举报
运行总次数:0
代码可运行

什么是PostgreSQL?

PostgreSQL自由的对象-关系型数据库服务器,在灵活的BSD风格许可证下发行。它在其他开放源代码数据库系统和专有系统之外,为用户又提供了一种选择。 我们还是建议您使用云数据库进行搭建,省去数据迁移等麻烦操作,数据库详见:https://cloud.tencent.com/product/cdb-overview

在本文中,我们将讨论如何在postgreSQL接口中创建和管理表。您将学习如何正确配置表并使用它们来存储您的信息。

如何在Ubuntu上安装并登录PostgreSQL

我们将在Ubuntu上安装PostgreSQL,但它应该可以在大多数其他发行版的默认存储库中使用。

输入以下要安装的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

安装后,创建一个新用户来管理我们将要创建的数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo adduser postgres_user

登录默认的PostgreSQL用户(称为“postgres”)来创建数据库并将其分配给新用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo su  -  postgres
PSQL

您将被放入PostgreSQL命令提示符。

创建与您创建的系统用户匹配的新用户。然后创建该用户管理的数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE USER postgres_user密码为' 密码 ';
CREATE DATABASE my_postgres_db OWNER postgres_user ;

使用以下命令退出界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\q

退出默认的“postgres”用户帐户并使用以下命令登录您创建的用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exit
sudo su - postgres_user

使用以下命令登录您创建的数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
psql my_postgres_db

我们现在准备了解表管理。

PostgreSQL中的表创建语法

我们的数据库还没有任何表格。我们可以此命令为来验证这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\d
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
No relations found.

我们可以通过以下语法来创建新表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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列和表定义

列定义遵循以下语法模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
column_name data_type (optional_data_length_restriction) column_constraints

列名应该是不言自明的。

PostgreSQL数据类型

数据类型可以是以下任何一种:

  • 布尔型:使用“boolean”或“bool”声明true或false值。
  • 字符值
    • 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”的表,它定义了各种游乐场设备。输入以下表定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
    );
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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”来查看我们的新表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\d
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                       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中更改表数据

我们可以使用以下通用语法更改表的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE table_name Action_TO_Take;

例如,我们可以通过输入以下命令在我们的“pg_equipment”表中添加一列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment ADD COLUMN functioning bool;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE

我们可以通过输入来查看额外的列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\d pg_equipment
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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               |
 . . .

要添加一个默认值,请提供以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment ALTER COLUMN functioning SET DEFAULT 'true';

如果我们想确保该值也不为null,我们可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment ALTER COLUMN functioning SET NOT NULL;

要重命名该列,请使用以下语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment RENAME COLUMN functioning TO working_order;

要删除我们刚刚创建的列,请输入以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment DROP COLUMN working_order;

我们可以使用以下命令重命名整个表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE pg_equipment RENAME TO playground_equip;

删除PostgreSQL中的表

我们可以通过输入下面的命令来删除我们创建的表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DROP TABLE playground_equip;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DROP TABLE

如果我们将该命令提供给不存在的表,我们将看到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ERROR: table "playground_equip" does not exist

为了避免这个错误,我们可以告诉postgreSQL删除表,并以任何方式成功返回。我们通过发出以下命令来完成此操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DROP TABLE IF EXISTS playground_equip;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NOTICE:  table "playground_equip" does not exist, skipping
DROP TABLE

这一次,它告诉我们找不到表,但继续而不是抛出错误。

结论

您现在应该知道在如何PostgreSQL中创建和管理简单表。如果您正在者学习如何从命令行控制PostgreSQL,这些技能将非常有用。更多Linux教程,请持续关注腾讯云+社区的文章。


参考文献:《How To Create, Remove, & Manage Tables in PostgreSQL on a Cloud Server》

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
要创建分布式表,您需要首先定义表 schema。为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样。
为少
2022/03/31
2.8K0
Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
一文读懂PostgreSQL中的索引
不管是单列索引还是组合索引,该索引必须是在 WHERE 子句的过滤条件中使用非常频繁的列。
言程序
2024/06/27
3010
如何在Ubuntu 18.04上使用PostgreSQL 10设置逻辑复制
在为生产设置应用程序时,准备好多个数据库副本通常很有用。保持数据库副本同步的过程称为复制。复制可以为大量同时读取操作提供高可用性水平扩展,同时减少读取延迟。它还允许在地理上分布的数据库服务器之间进行对等复制。
葡萄
2018/10/29
2.9K0
PostgreSQL常用语句
注意:select current_setting(‘server_version_num’);返回类型为text,如果需要可以转换为interger
Java架构师必看
2021/06/10
8280
如何在CentOS 7上安装和使用PostgreSQL
关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。
八十岁的背影
2018/10/09
5K0
进阶数据库系列(五):PostgreSQL 语法详解
默认情况下 PostgreSQL 安装完成后,自带了一个命令行工具SQL Shell(psql)。
民工哥
2023/08/22
8160
进阶数据库系列(五):PostgreSQL 语法详解
如何在Ubuntu 18.04上安装和使用PostgreSQL
关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。
藕丝空间
2018/07/27
5.5K0
openGauss与PostgreSQL分区策略语法测试
PostgreSQL支持继承,版本10之前的分区表都是通过继承特性来实现,每个分区实际上都是一个独立的表。数据更新可通过触发器trigger或者规则rule来实现。
数据和云
2021/05/31
1.4K0
分布式 PostgreSQL,Citus(11.x) 效用函数
本文包含 Citus 提供的用户定义函数的参考信息。这些函数有助于为 Citus 提供除标准 SQL 命令之外的其他分布式功能。
为少
2022/09/02
1.6K0
分布式 PostgreSQL,Citus(11.x) 效用函数
Ubuntu PostgreSQL安装和配置
config /etc/postgresql/9.5/main data /var/lib/postgresql/9.5/main locale en_US.UTF-8 socket /var/run/postgresql port 5432
qubianzhong
2019/07/01
1.8K0
Ubuntu PostgreSQL安装和配置
[译]解锁TOAST的秘密:如何优化PostgreSQL的大型列存储以最佳性能和可扩展性
解锁TOAST的秘密:如何优化PostgreSQL的大型列存储以最佳性能和可扩展性
yzsDBA
2023/02/26
2.3K0
[译]解锁TOAST的秘密:如何优化PostgreSQL的大型列存储以最佳性能和可扩展性
如何在Debian 8上安装和使用PostgreSQL 9.4
关系数据库是满足多种需求的数据组织的基石。它们支持从网上购物到火箭发射的各种功能。PostgreSQL是一个既古老但仍然存在的数据库。PostgreSQL遵循大部分SQL标准,具有ACID事务,支持外键和视图,并且仍在积极开发中。
宇cccc
2018/09/29
4.3K0
如何在Ubuntu 16.04上安装和使用PostgreSQL
关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。
丰一川
2018/10/08
5.3K0
PostgreSQL新手入门
自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选。 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手。以下内容基于Debian操作系统,其他操作系
ruanyf
2018/04/13
1.3K0
PostgreSQL新手入门
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
这是个bug,版本升级后,pg_config改变了,会导致后面装外部extension时没有装到指定目录。
民工哥
2023/08/22
1.4K0
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
[ES三周年]PostgreSQL数据的存储基础知识
OID 是 PostgreSQL 内部用于标识数据库对象(数据库,表**,视图,**存储过程等等)的标识符,用4个字节的无符号整数表示。它是PostgreSQL大部分系统表的主键。
宇宙无敌暴龙战士之心悦大王
2023/03/15
2.4K0
PostgreSQL / openGauss 数据库易犯的十个错误
然后当我们配置为csvlog日志时,日志行的内容项是固定的,所以当我们需要配置日志前缀,精简日志行的内容项时,log_destination不能配置为csvlog。下面是正确的配置:
数据和云
2021/07/09
1K0
进阶数据库系列(二十):PostgreSQL 数据库备份与恢复
此种方式是直接备份数据库物理文件,在pg数据库里,这通常指的是PGDATA变量定义的文件夹,例如:
民工哥
2023/08/22
7.4K0
进阶数据库系列(二十):PostgreSQL 数据库备份与恢复
Postgresql 渗透利用总结
将文件分成小于2KB大小的hex在上传,在9.6版本中切割必须等于2KB才能上传成功。先创建一个OID作为写入对象,然后通过0,1,2,3……分片上传,最后倒入/tmp目录下并删除OID,命令执行:
Power7089
2020/07/27
2.4K0
Postgresql FDW技术的应用
Ubuntu 16.04 LTS云主机2台,主机名为pg1(192.168.0.10)和pg2(192.168.0.11)。
伊泽瑞尔
2022/06/01
5570
相关推荐
Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文