想熟悉PostgreSQL?这篇就够了

作者: a3aac2d1b674 | 来源:发表于2018-07-23 11:06 被阅读2次

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

    本文由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?这篇就够了

        本文链接:https://www.haomeiwen.com/subject/owvdmftx.html