PostgreSQL-数据库命令

这篇具有很好参考价值的文章主要介绍了PostgreSQL-数据库命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PostgreSQL-数据库命令

介绍

一个数据库是一个或多个模式的集合,而模式包含表、函数等。因此,完整的逻辑组织结构层次是服务器实例(PostgreSQL Server)、数据库(Database)、模式(Schema)、表(Table),以及某些其他对象(如函数)。一个PostgreSQL服务器实例可以管理多个数据库。当应用程序连接到一个数据库时,一般只能访问该数据库中的数据。

数据库命令

database

连接数据库

-- 默认连接,连接postgres数据库
psql
-- 指定配置连接数据库
psql -h localhost -p 5432 -U postgress dbname

查看数据库

\l

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

创建数据库

语法
CREATE DATABASE name
[
  [WITH][OWNER[=]user_name]
 [TEMPLATE[=]template]
 [ENCODING[=]encoding]
 [LC_COLLATE[=]lc_collate]
 [LC_CTYPE[=]lc_ctype]
 [TABLESPACE[=]tablespace_name]
 [ALLOW_CONNECTIONS[=]allowconn]
 [CONNECTION LIMIT[=]connlimit]
 [IS_TEMPLATE[=]istemplate]
]

参数说明:

  • name:要创建的数据库的名称
  • user_name:要创建的数据库所属的用户。如果没有指定,则默认属于执行该命令的用户
  • template:要创建的数据库所用的模版库,默认的模版库是template1
  • encoding:要创建的数据库所使用的字符集。如果没有指定,则默认使用其模版库的字符集
  • lc_collate:要创建的数据库所使用的collation顺序。这会影响在ORDER_BY语法中字符串类型列的顺序,也会影响text类型列的索引顺序。如果没有指定,则默认使用其模版库的collation顺序
  • lc_ctype:要创建的数据库所使用的字符分类。如大小写和数字。如果没有指定,则默认使用其模版库的字符分类
  • tablespace_name:要创建的数据库所使用的字符分类
  • allowconn:是否可以连接该数据库,默认设置为true。如果设置为false,则任何用户都不能连接该数据库
  • connlimit:允许并发连接该数据库的个数。默认设置为-1,即没有限制
  • istemplate:是否是模版库,默认设置为false。如果设置为true,则任何具有创建数据库权限的用户均可以用其复制新的数据库;如果设置为false,则只有超级用户和该数据库的用户可以其复制新的数据库
示例

创建数据库,命名为db_test

CREATE DATABASE db_test;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

创建数据库,名为为db_test01,所属用户为postgres,关联的表空间为test

CREATE DATABASE db_test01 OWNER postgres TABLESPACE test;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

到表空间目录下,可以看到创建了新的文件夹

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

修改数据库

语法

ALTER DATABASE name[[WITH]option[...]]

参数说明:

  • ALLOW_CONNECTIONS allowconn
  • CONNECTION LIMIT connlimit
  • IS_TEMPLATE istemplate
  • ALTER DATABASE name RENAME TO new_name
  • ALTER DATABASE name OWNER TO {new_owner|CURRENT_USER|SESSION_USER}
  • ALTER DATABASE name SET TABLESPACE new_tablespace
  • ALTER DATABASE name SET configuration_parameter{TO|=}{value|DEFAULT}
  • ALTER DATABASE name SET configuration_parameter FROM CURRENT
  • ALTER DATABASE name RESET configuration_parameter
  • ALTER DATABASE name RESET ALL

将数据库“test”的名称改为“test01”

ALTER DATABASE test RENAME TO test01;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

将数据库“test01”中的最大连接数改为“100”

ALTER DATABASE test01 CONNECTION LIMIT 100;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

将数据库“test01”的索引扫描关闭,当用户连接到该数据库时就将enable_indexscan设置为off

ALTER DATABASE test01 SET enable_indexscan TO off;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

删除数据库

语法

DROP DATABASE [IF EXISTS]name

加上“IF EXISTS”可选关键字,则在删除数据库时,如果该数据库不存在,不会报错,只会打印NOTICE信息

删除一个已经存在数据库“test01”

DROP DATABASE test01;

PostgreSQL-数据库命令,PostgreSQL,数据库,postgresql,SQL,命令

切换数据库

\c dbname

表格命令

table

创建表

普通表
create table company
(
    id      integer not null
        constraint company_pkey
            primary key,
    name    text    not null,
    age     integer not null,
    address char(50),
    salary  real
);

comment on column company.id is '唯一id';

comment on column company.name is '名称';

comment on column company.age is '年龄';

comment on column company.address is '地址';

comment on column company.salary is '薪水';

alter table company
    owner to postgres;
空间表

创建带有空间属性字段的表

geom不指定坐标系和数据类型,则可以存储所有类型和坐标的数据,不过在查询的时候需要知道数据的坐标系

也可以指定坐标系和数据类型,如geom geometry(MultiPolygon,4490), geom geometry(Polygon,4326),

create table geo
(
    geom geometry
);

alter table geo
    owner to postgres;
自动增长(AUTO INCREMENT)

AUTO INCREMENT(自动增长) 会在新记录插入表中时生成一个唯一的数字。

PostgreSQL 使用序列来标识字段的自增长,数据类型有 smallserial、serial 和 bigserial 。这些属性类似于 MySQL 数据库支持的 AUTO_INCREMENT 属性。

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
id设置自增
create sequence company_id_seq;

alter table company alter column id set default nextval('public.company_id_seq');

alter sequence company_id_seq owned by company.id;

外键

级联删除
ALTER TABLE public.auth_role_permission
    ADD FOREIGN KEY (role_id)
    REFERENCES public.auth_role (id)
    ON UPDATE NO ACTION
    ON DELETE CASCADE
    NOT VALID;
CREATE INDEX auth_role_permission_role_id
    ON public.auth_role_permission(role_id);

约束

常见约束

  • NOT NULL:指示某列不能存储NULL值
  • UNIQUE:确定某列的值都是唯一的
  • PRIMARY Key:NOT NULL和UNIQUE的结合确保某列(或两个列多个列的结合)有唯一标示
  • FOREIGN Key:保证一个表中的数据匹配另一表中的值的参照完整性
  • CHECK:保证列中的值符合指定的条件
  • EXCLUSION:排他约束,保证如果将任何两行的指定列或表达式使用指定操作符进行比较,至少其中一个操作符比较将会返回false或空值

使用EXCLUSION约束

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,  -- 如果满足 NAME 相同,AGE 不相同则不允许插入,否则允许插入
   AGE WITH <>)   -- 其比较的结果是如果整个表边式返回 true,则不允许插入,否则允许
);
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );  
-- 此条数据的 NAME 与第一条相同,且 AGE 与第一条也相同,故满足插入条件
INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );
-- 此数据与上面数据的 NAME 相同,但 AGE 不相同,故不允许插入

前面两条顺利添加的 COMPANY7 表中,但是第三条则会报错:

ERROR:  duplicate key value violates unique constraint "company7_pkey"
DETAIL:  Key (id)=(3) already exists.
删除约束

删除约束必须知道约束名称,已经知道名称来删除约束很简单,如果不知道名称,则需要找到系统生成的名称,使用 \d 表名 可以找到这些信息。

通用语法如下:

ALTER TABLE table_name DROP CONSTRAINT some_name;

编辑表结构

在 PostgreSQL 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列。

另外你也可以用 ALTER TABLE 命令添加和删除约束。

新增表字段
alter table company
	add mark varchar;

comment on column company.mark is '备注';
删除表字段
alter table company drop column mark;
修改表字段
alter table company rename column mark to remark;

comment on column company.remark is '备注1';
语法

用 ALTER TABLE 在一张已存在的表上添加列的语法如下:

ALTER TABLE table_name ADD column_name datatype;

在一张已存在的表上 DROP COLUMN(删除列),语法如下:

ALTER TABLE table_name DROP COLUMN column_name;

修改表中某列的 DATA TYPE(数据类型),语法如下:

ALTER TABLE table_name ALTER COLUMN column_name TYPE datatype;

给表中某列添加 NOT NULL 约束,语法如下:

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

给表中某列 ADD UNIQUE CONSTRAINT( 添加 UNIQUE 约束),语法如下:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);

给表中 ADD CHECK CONSTRAINT(添加 CHECK 约束),语法如下:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

给表 ADD PRIMARY KEY(添加主键),语法如下:

ALTER TABLE table_name
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);

DROP CONSTRAINT (删除约束),语法如下:

ALTER TABLE table_name
DROP CONSTRAINT MyUniqueConstraint;

如果是 MYSQL ,代码是这样:

ALTER TABLE table_name
DROP INDEX MyUniqueConstraint;

DROP PRIMARY KEY (删除主键),语法如下:

ALTER TABLE table_name
DROP CONSTRAINT MyPrimaryKey;

如果是 MYSQL ,代码是这样:

ALTER TABLE table_name
DROP PRIMARY KEY;

查看数据库中的表

\d

查看表的详细信息

\d tablename

删除表

DROP TABLE table_name;

数据清理

PostgreSQL 中 TRUNCATE TABLE 用于删除表的数据,但不删除表结构。

也可以用 DROP TABLE 删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。

TRUNCATE TABLE 与 DELETE 具有相同的效果,但是由于它实际上并不扫描表,所以速度更快。 此外,TRUNCATE TABLE 可以立即释放表空间,而不需要后续 VACUUM 操作,这在大型表上非常有用。

PostgreSQL VACUUM 操作用于释放、再利用更新/删除行所占据的磁盘空间。

TRUNCATE TABLE  table_name;
清空表并保留表结构

一般情况下,我们使用delete删除表中数据,但是delete是一条数据一条数据来删除表中的数据,直至表清空(保留表结构),但是当数据量很大时,它耗时较久。
其实,删除表数据但保留表结构使用truncate更快速安全,使用方法为:

#当表没有其他关系时
TRUNCATE TABLE tablename;
#当表中有外键时,要用级联方式删所有关联的数据
TRUNCATE TABLE tablename CASCADE;
清空数据库还原数据库为新建时的状态

在postgresql中,创建数据库时会自动创建public模式,一般我们把表都保存在该模式中,因此直接删除该模式再重新创建该模式。
若数据在其他模式中,则把public换为数据表所在模式即可。

#删除public模式以及模式里面所有的对象
DROP SCHEMA public CASCADE;
#创建public模式
CREATE SCHEMA public;

模式命令

创建模式

create schema myschema;

在指定模式创建表

reate table myschema.company(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25),
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

删除模式

删除一个为空的模式,其中的所有对象已经被删除

DROP SCHEMA myschema;

删除一个模式以及其中包含的所有对象:

DROP SCHEMA myschema CASCADE;

权限(PRIVILEGES)

无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。

对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。

在 PostgreSQL 中,权限分为以下几种:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • TRUNCATE
  • REFERENCES
  • TRIGGER
  • CREATE
  • CONNECT
  • TEMPORARY
  • EXECUTE
  • USAGE

根据对象的类型(表、函数等),将指定权限应用于该对象。

要向用户分配权限,可以使用 GRANT 命令。

GRANT 语法

GRANT 命令的基本语法如下:文章来源地址https://www.toymoban.com/news/detail-628316.html

GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
  • privilege − 值可以为:SELECT,INSERT,UPDATE,DELETE, RULE,ALL。
  • object − 要授予访问权限的对象名称。可能的对象有: table, view,sequence。
  • PUBLIC − 表示所有用户。
  • GROUP group − 为用户组授予权限。
  • username − 要授予权限的用户名。PUBLIC 是代表所有用户的简短形式。
GRANT ALL ON COMPANY TO runoob;
REVOKE ALL ON COMPANY FROM runoob;
DROP USER runoob;

到了这里,关于PostgreSQL-数据库命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

      C++ 是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库。 连接 SQL Server 数据库 要使用 C++ 连接 SQL Server 数据库,可以使用 Microsoft 的 ADODB 库。以

    2024年02月05日
    浏览(45)
  • PostgreSQL Linux操作PostgreSQL数据库

    PostgreSQL教程 菜鸟教程:https://www.runoob.com/postgresql/postgresql-tutorial.html 登录PG数据库:psql -U 用户名(U需要大写) 登录PG数据库(指定主机、端口,并进入指定数据库): psql -U 用户名 -h 127.0.0.1 -p 5432 -d 数据库名 -U 登录的用户名 -h 连接的主机(默认127.0.0.1,可替换成远程主机

    2024年02月11日
    浏览(44)
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

    MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不

    2024年02月14日
    浏览(66)
  • PostgreSQL 创建数据库

    PostgreSQL 创建数据库可以用以下三种方式: CREATE DATABASE 命令需要在 PostgreSQL 命令窗口来执行,语法格式如下: 例如,我们创建一个 runoobdb 的数据库: createdb 命令创建数据库 createdb 是一个 SQL 命令 CREATE DATABASE 的封装。 参数说明: . dbname:要创建的数据库名。 . description:关

    2024年02月12日
    浏览(42)
  • Postgresql数据库死锁

    ERROR: deadlock detected DETAIL: Process 95 waits for ShareLock on transaction 3553457; blocked by process 187. Process 187 waits for ShareLock on transaction 3553458; blocked by process 95. HINT: See server log for query details. CONTEXT: while updating tuple (0,6) in relation “deadlock_example” 其中 Process 95 在等待共享锁(ShareLock)的事务

    2024年01月20日
    浏览(49)
  • postgresql数据库定时备份到远程数据库

    1.老规矩,服务器目录结构: conf目录无内容 profile: 其中: 最后一行 export PGPASSWORD=‘root’ 是需要备份的数据库的密码,因为直接用 pg_dump 命令备份需要输入密码交互,而我们需要达到自动备份,所以借助这种方式不需要输入密码 docker-compose.yml: 启动容器: 然后再data目录下面

    2024年02月09日
    浏览(36)
  • 【数据库】什么是 PostgreSQL?开源数据库系统

    PostgreSQL 是一个开源的对象关系数据库系统,本文,我们将讨论 PostgreSQL、它的用途和好处。 PostgreSQL 是由 PostgreSQL Global Development Group 开发的高级 开源关系数据库管理系统(RDBMS) 。它作为 POSTGRES 项目的一部分于 1986 年在加州大学伯克利分校启动,它最初于 1996 年 7 月 8 日发布

    2023年04月08日
    浏览(32)
  • postgresql 数据库 索引 介绍

    大家在学习数据库的时候,是不是常常听到索引?那什么是索引呢?索引有哪些作用呢?索引有哪些种类呢?为什么要建索引呢?带着这些疑问,本文带你一起学习postgresql数据库的索引。 索引是提高数据库性能的常用途径。比起没有索引,使用索引可以让数据库服务器更快

    2024年02月13日
    浏览(43)
  • PostgreSQL连接指定数据库

    要连接到PostgreSQL中的指定数据库,您需要使用以下格式的连接字符串: 其中,username是连接PostgreSQL的用户名,password是该用户的密码,hostname是PostgreSQL服务器的主机名或IP地址,port是PostgreSQL服务器的端口号,database_name是要连接的数据库名称。 例如,如果您要连接到名为my

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包