欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由angel_郁 发表于云+社区专栏

什么是PostgreSQL?

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

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

如何在Ubuntu上安装并登录PostgreSQL

我们将在Ubuntu上安装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密码为' 密码 ';
CREATE DATABASE my_postgres_db OWNER postgres_user ;

使用以下命令退出界面:

\q

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

exit
sudo su - postgres_user

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

psql my_postgres_db

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

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”或“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”的表,它定义了各种游乐场设备。输入以下表定义:

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

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

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,这些技能将非常有用。更多Linux教程,请持续关注腾讯云+社区的文章。


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

问答

PostgreSQL的隐藏特征?

相关阅读

Nginx的安装和配置疑难解答

如何备份你的MySQL数据库

MySQL 8.0 版本功能变更介绍

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1160560?fromSource=waitui

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区

想熟悉PostgreSQL?这篇就够了的更多相关文章

  1. 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!

    想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!   很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...

  2. 透彻掌握Promise的使用,读这篇就够了

    透彻掌握Promise的使用,读这篇就够了 Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻.这篇文章的开头,主要跟大家分析一下,为什么会有Promise出现. ...

  3. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  4. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  5. 任务21 :了解ASP.NET Core 依赖注入,看这篇就够了

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  6. [转]React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  7. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  8. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  9. Ajax原理一篇就够了

    Ajax原理一篇就够了 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简 ...

随机推荐

  1. delphi添加.ocx后缀的控件

    在delphi ocx控件的安装步骤:1.第一步: 使用过Activex的人都知道,Activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的Activex控件注册,但如果拿到 ...

  2. java-04流程控制语句

    这里先简单介绍几种流程控制语句 包括if/if-else.switch语句 1.三大流程控制结构 所谓流程控制,就是说要控制程序的执行方式,根据不同的情况执行不同的代码,从而得到不同情况下的不同结果. ...

  3. Web界面设计(Designing Web Interfaces中文版) (美)斯科特 pdf扫描版​

    Web界面设计是由Bill Scott编著.电子工业出版社出版的一部图书,在Web已经进入崭新的时代的今天,界面的设计显得非常重要,本书就是基于独一无二的Web环境下.在创建丰富体验的过程中设计Web ...

  4. python之文件操作总结

    目录 文件:数据的抽象和集合 文件的打开关闭 文件内容的读取 文件的全文本操作 文件的逐行操作 数据文件的写入 使用json模块 文件:数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据 ...

  5. 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)

    TX面试题2: 已知一个含有n个元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的) 题目分析, 为了便于说明,不妨将问题简化一下: 已知一个盒子中有n个不同的球,分别标记为{a1,a2,. ...

  6. java 添加到数据库的数据没有时分秒

    检查hibernate实体类的映射文件日期类型把date 改为 java.util.Date

  7. .net core i上 K8S(七).netcore程序的服务发现

    上一章我们分享了k8s的网络代理模式,今天我们来分享一下k8s中的服务发现. 1.环境变量模式的服务发现 k8s默认为我们提供了通过环境变量来实现服务发现的功能,前提是 1.需要service在pod ...

  8. pos机代理行业

        传统模式(代理):代理商线性分润,代理商或营运商给一代大量的机器及要求,而且这个要求公对公结算(必须要有公司),分润也是直接给一代.然后一代找二代推广,层层发展.这样你会很担心你的上家的上家突 ...

  9. BZOJ4032: [HEOI2015]最短不公共子串(后缀自动机+序列自动机)

    题目描述 在虐各种最长公共子串.子序列的题虐的不耐烦了之后,你决定反其道而行之. 一个串的“子串”指的是它的连续的一段,例如bcd是abcdef的子串,但bde不是. 一个串的“子序列”指的是它的可以 ...

  10. Python 中的 10 个常见安全漏洞,以及如何避免(下)

    简评:编写安全代码很困难,当你学习一个编程语言.模块或框架时,你会学习其使用方法. 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中,也存在用于编写应用的不良实践.然而 ...