PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍

2.数据库基本操作

2.1 创建数据库
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace ]
[ CONNECTION LIMIT [=] connlimit ] ]

参数说明如下。

·OWNER [=] user_name:用于指定新建的数据库属于哪个用 户,如果不指定,新建的数据库就属于当前执行命令的用户。

·TEMPLATE [=] template:模板名(从哪个模板创建新数据 库),如果不指定,将使用默认模板数据库(template1)。

·[ENCODING [=] encoding]:创建新数据库使用的字符编码。 

·TABLESPACE [=] tablespace:用于指定和新数据库关联的表空 间名称。

·CONNECTION LIMIT [=] connlimit]:用于指定数据库可以接受 多少并发的连接。默认值为“-1”,表示没有限制。

postgres=# 
postgres=# CREATE DATABASE osdbadb;
CREATE DATABASE
postgres=#postgres=# CREATE DATABASE testdb01 ENCODING 'UTF-8' TEMPLATE template0;
CREATE DATABASE
postgres=#
2.2 修改数据库
ALTER DATABASE name [ [ WITH ] option [ ... ] ]
这里的“option”可以以下几种语法结构:
·CONNECTION LIMIT connlimit。
·ALTER DATABASE name RENAME TO new_name。
·ALTER DATABASE name OWNER TO new_owner。
·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。

示例1,将数据库“testdb01”的最大连接数修改为“10”,命令 如下:

示例2,将数据库“testdb01”的名称改为“mydb01”,命令 如下:

示例3,改变数据库“testdb01”的配置参数,使用户一旦连接到 这个用户,某个配置参数就设置为指定的值。比如,关闭在数据库 “testdb01”上的默认索引扫描,命令如下:

postgres=# 
postgres=# 
postgres=# alter database testdb01 CONNECTION LIMIT 10;
ALTER DATABASE
postgres=# 
postgres=# 
postgres=# 
postgres=# 
postgres=# alter database testdb01 rename to mydb01;
ALTER DATABASE
postgres=# 
postgres=# 
postgres=# 
postgres=# 
postgres=# 
postgres=# ALTER DATABASE mydb01 SET enable_indexscan TO off;        
ALTER DATABASE
postgres=# 
2.3 删除数据库
postgres=# 
postgres=# drop database testdb01;
ERROR:  database "testdb01" does not exist
postgres=# 
postgres=# drop database if exists mydb01;
DROP DATABASE
postgres=# 

注意,如果还有用户连接在这个数据库上,将无法删除该数据 库。

2.4 常见问题

3. 模式

模式是数据库领域的一个基本概念,有些数据库把模式和用户合 二为一了,而PostgreSQL是有清晰的模式定义。

3.1 什么是模式

模式(Schema)是数据库中的一个概念,可以将其理解为一个命 名空间或目录,不同的模式下可以有相同名称的表、函数等对象而不 会产生冲突。提出模式的概念是为了便于管理,只要有权限,各个模 式的对象可以互相调用。

·允许多个用户使用同一个数据库且用户之间又不会互相干扰。

·把数据库对象放在不同的模式下组织成逻辑组,使数据库对象 更便于管理。

·第三方的应用可以放在不同的模式中,这样就不会和其他对象 的名字产生冲突了。

3.2 模式的使用
postgres=# create schema maxdba;
CREATE SCHEMA
postgres=# \dnList of schemasName  |  Owner   
--------+----------maxdba | postgrespublic | postgres
(2 rows)postgres=# drop schema maxdba;
DROP SCHEMA
postgres=# 
postgres=# create schema authorization postgres;
CREATE SCHEMA
postgres=# 
postgres=# \dnList of schemasName   |  Owner   
----------+----------postgres | postgrespublic   | postgres
(2 rows)postgres=#

在模式中可以修改名称和属主,

语法格式如下:

ALTER SCHEMA name RENAME TO newname

ALTER SCHEMA name OWNER TO newowner

postgres=# 
postgres=# create schema postgres
postgres-# CREATE TABLE t1 (id int, title text)
postgres-# CREATE TABLE t2 (id int, content text)
postgres-# CREATE VIEW v1 AS SELECT a.id,a.title, b.content FROM t1 a,t2 b where a.id=b.id;
CREATE SCHEMA
postgres=# \dList of relationsSchema  |    Name     | Type  |  Owner   
----------+-------------+-------+----------postgres | t1          | table | postgrespostgres | t2          | table | postgrespostgres | v1          | view  | postgrespublic   | class       | table | postgrespublic   | ipdb1       | table | postgrespublic   | ipdb2       | table | postgrespublic   | jtest01     | table | postgrespublic   | jtest02     | table | postgrespublic   | jtest03     | table | postgrespublic   | score       | table | postgrespublic   | student     | table | postgrespublic   | student_bak | table | postgrespublic   | t           | table | postgrespublic   | test02      | table | postgrespublic   | test1       | table | postgrespublic   | testtab05   | table | postgrespublic   | testtab06   | table | postgrespublic   | testtab07   | table | postgrespublic   | testtab08   | table | postgrespublic   | testtab09   | table | postgres
(20 rows)postgres=# alter schema postgres rename to postgresold;
ALTER SCHEMA
postgres=# \dnList of schemasName     |  Owner   
-------------+----------maxdba      | postgresosdba       | postgrespostgresold | postgrespublic      | postgres
(4 rows)postgres=#

搜索路径中的第一个模式叫当前模式。除了是搜索的第一个模式 之外,它还是在CREATE TABLE没有声明模式名时新建表所属的模式。 要显示当前搜索路径,使用下面的命令:

postgres=# 
postgres=# show search_path;search_path   
-----------------"$user", public
(1 row)postgres=# 
3.3 模式的搜索路径
postgres=# 
postgres=# 
postgres=# show search_path;search_path   
-----------------"$user", public
(1 row)postgres=# 

4.表

4.1 创建表
postgres=# create table test01(id int primary key, note
postgres(# varchar(20));
CREATE TABLE
postgres=# create table test02(id1 int, id2 int, note
postgres(# varchar(20), CONSTRAINT pk_test02 primary key(id1,id2));
ERROR:  relation "test02" already exists
postgres=# drop table test02;
DROP TABLE
postgres=# create table test02(id1 int, id2 int, note
postgres(# varchar(20), CONSTRAINT pk_test02 primary key(id1,id2));
CREATE TABLE
postgres=# drop test03;
ERROR:  syntax error at or near "test03"
LINE 1: drop test03;^
postgres=# drop table test03;
ERROR:  table "test03" does not exist
postgres=# create table test03(id1 int, id2 int, id3 int,
postgres(# note varchar(20), CONSTRAINT pk_test03 primary
postgres(# key(id1,id2), CONSTRAINT uk_test03_id3 UNIQUE(id3));
CREATE TABLE
postgres=# 
postgres=# CREATE TABLE child(name varchar(20), age int,
postgres(# note text, CONSTRAINT ck_child_age CHECK(age <18));
CREATE TABLE
postgres=# CREATE TABLE baby (LIKE child);
CREATE TABLE
postgres=# \d child;Table "public.child"Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------name   | character varying(20) |           |          | age    | integer               |           |          | note   | text                  |           |          | 
Check constraints:"ck_child_age" CHECK (age < 18)postgres=# \d babyTable "public.baby"Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------name   | character varying(20) |           |          | age    | integer               |           |          | note   | text                  |           |          | postgres=# CREATE TABLE baby2 (LIKE child INCLUDING
postgres(# ALL);
CREATE TABLE
postgres=# \d baby2Table "public.baby2"Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------name   | character varying(20) |           |          | age    | integer               |           |          | note   | text                  |           |          | 
Check constraints:"ck_child_age" CHECK (age < 18)postgres=# CREATE TABLE baby2 AS SELECT * FROM child WITH
postgres-# NO DATA;
ERROR:  relation "baby2" already exists
postgres=# CREATE TABLE baby3 AS SELECT * FROM child WITH 
NO DATA;
CREATE TABLE AS
postgres=# 
4.2 约束

·检查约束。

postgres=# CREATE TABLE persons (
postgres(# name varchar(40),
postgres(# age int CONSTRAINT check_age CHECK (age >= 0 and age
postgres(# <=150),
postgres(# sex boolean
postgres(# );
CREATE TABLE
postgres=# CREATE TABLE books (
postgres(# book_no integer,
postgres(# name text,
postgres(# price numeric CHECK (price > 0),
postgres(# discounted_price numeric CHECK (discounted_price > 0),
postgres(# CHECK (price > discounted_price)
postgres(# );
CREATE TABLE
postgres=# 

·非空约束。

非空约束只是简单地声明一个字段必须不能是NULL。

postgres=# 
postgres=# CREATE TABLE books1 (
postgres(# book_no integer not null,
postgres(# name text,
postgres(# price numeric
postgres(# );
CREATE TABLE
postgres=# CREATE TABLE books2 (
postgres(# book_no integer NOT NULL,
postgres(# name text,
postgres(# price numeric NOT NULL CHECK (price >0)
postgres(# );
CREATE TABLE
postgres=# 

·唯一约束。

唯一约束可以保证在一个字段或者一组字段中的数据相较于表中 其他行的数据是唯一的。

postgres=# 
postgres=# CREATE TABLE books3 (
postgres(# book_no integer UNIQUE,
postgres(# name text,
postgres(# price numeric
postgres(# );
CREATE TABLE
postgres=# 
postgres=# 
postgres=# 
postgres=# 
postgres=# 
postgres=# CREATE TABLE books4 (
postgres(# book_no integer,
postgres(# name text,
postgres(# price numeric,
postgres(# UNIQUE(book_no)
postgres(# );
CREATE TABLE
postgres=# 

·主键。

主键与唯一约束的区别是,主键不能为空。通常我们是建表时就 指定了主键:

postgres=# 
postgres=# CREATE TABLE books5 (
postgres(# book_no integer primary key,
postgres(# name text,
postgres(# price numeric,
postgres(# UNIQUE(book_no)
postgres(# );
CREATE TABLE
postgres=# ALTER TABLE books add constraint pk_books_book_no primary
postgres-# key (book_no);
ALTER TABLE
postgres=# 

·外键约束。

外键约束是对表之间关系的一种约束,用于约束本表中一个或多 个字段的数值必须出现在另一个表的一个或多个字段中。这种约束也 可以称为两个相关表之间的参照完整性约束。

postgres=# 
postgres=# CREATE TABLE class(
postgres(# class_no int primary key,
postgres(# class_name varchar(40)
postgres(# );
CREATE TABLE
postgres=# CREATE TABLE student(
postgres(# student_no int primary key,
postgres(# student_name varchar(40),
postgres(# age int,
postgres(# class_no int REFERENCES class(class_no)
postgres(# );
CREATE TABLE
postgres=# select * from class;class_no | class_name 
----------+------------
(0 rows)postgres=# insert into student values(1,'张三',13,10);
ERROR:  insert or update on table "student" violates foreign key constraint "student_class_no_fkey"
DETAIL:  Key (class_no)=(10) is not present in table "class".
postgres=# 

4.3 修改表

·增加字段。

·删除字段。

·增加约束。

·删除约束。

·修改默认值。

·删除默认值。

·修改字段数据类型。

·重命名字段。

·重命名表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/180157.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python连接clickhouse (CK)

Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…

freertos入门(stm32f10c8t6版闪烁灯)

首先到官网下载freertos源码&#xff0c;然后找一个stm32f10c8t6的空模板&#xff0c;这个空模板实现点灯之类的都行。 然后在这个空模板的工程下新建一个FreeRtos文件夹 接着在FreeRtos文件夹下新建三个文件夹&#xff0c;分别是src存放源码 inc 存放头文件&#xff0c;port …

EasyExcel复杂表头数据导入

目录 表头示例导入代码数据导出 表头示例 导入代码 Overridepublic void importExcel(InputStream inputStream) {ItemExcelListener itemExcelListener new ItemExcelListener();EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet()…

广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验

今年5月21日&#xff0c;中国智电新能源旗舰MPV——广汽传祺智电新能源E9在北京人民大会堂举办上市发布会。 发布会现场&#xff08;图源官方&#xff09; 为了让更多的消费者能够在线上感受到广汽传祺E9的魅力&#xff0c;3DCAT实时渲染云与大圣科技合作为广汽传祺打造了一款…

CHS零壹视频恢复程序高级版视频修复OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR&#xff0c;OCR是一种光学识别系统&#xff0c;高级版最新版本中不仅仅是在视频恢复中支持OCR&#xff0c;同时视频修复模块也增加了OCR功能&#xff0c;此功能可以针对一些批量修复的视频文件&#xff08;如执法仪…

IDEA中如何移除未使用的import

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

@reduxjs/toolkit配置react-redux解决createStore或将在未来被淘汰警告

通常 我们用redux都需要通过 createStore 但目前 你去用它 基本都会被划线 甚至有点厉害的的编辑器 他会直接告诉你这个东西基本快被弃用了 这个应该大家都知道 最好不要用已经被明确未来或弃用的语法 因为一旦弃用这个系统就需要维护 而且说 一般会被淘汰的语法 本身也就是有…

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)

2023年9月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、运行程序后,变量"result"的值是6 答案:对 考点分析:考查积木综合使用,重点考查自定义积木的使用 图中自定义积木实现的功能是获取两个数中最大的那个数并存放在result变量中,左…

FMC驱动LCD

硬件简介 主控&#xff1a;STM32H750 LCD屏幕为16位并口屏幕 CubeMX配置 chip select: 选择起始地址块号&#xff0c;ADDR[27:26] Memory type: 内存类型&#xff0c;选择LCD Interface LCD Register Select: 根据选择计算映射地址, FSNC_A[25] Data: 数据宽度 NOR/PSRAM ti…

分享一个抖音视频解析神器~

怎么样下载抖音视频&#xff1f;相信很多人都有过这样的困惑。作为一个资深短视频剪辑工作者&#xff0c;常常需要用到各种视频素材&#xff0c;其中不乏需要从抖音上下载的&#xff0c;因此我也尝试过许多下载工具&#xff0c;但是效果都不大满意&#xff0c;直到有一次朋友给…

el-table表格设置——动态修改表头

(1) 首先是form表单写表单设置按钮&#xff1a; &#xff08;1.1&#xff09;使用el-popover&#xff0c;你需要修改的是this.colOptions&#xff0c;colSelect: <el-popover id"popover" popper-class"planProver" placement"bottom" width&…

算法?认识一下啦

一、什么是算法&#xff1f; 算法 &#xff0c;是对特定问题求解方法和步骤的一种描述。它是有限指令的有限序列&#xff0c;其中每个指令表示一个或多个操作。 算法和程序的关系 算法​是解决问题的一种方法或一个过程&#xff0c;考虑如何将输入转换成输出&#xff0c;一个…

高防IP的原理

高防IP&#xff0c;把域名解析到高防IP上(web事务只要把域名指向高防IP 即可。非web事务&#xff0c;把事务IP换成高防IP即可)一起在高防IP上设置转发规矩;所有公网流量都会走高防IP&#xff0c;通过端口协议转发的方法将用户的拜访通过高防IP转发到源站IP&#xff0c;一起将歹…

《C/C++代码审计实践》一书出版了

我撰写了代码审计一书&#xff0c;包括了C、C、Java语言&#xff0c;加起来有600多页&#xff0c;书籍太厚&#xff0c;印刷成本比较高&#xff0c;出版社对于代码审计将来的销量也有所担心&#xff0c;他们更担心的在书中涉及到了对国家标准的解读&#xff0c;尤其是国家军用标…

XML External Entity-XXE-XML实体注入

XML 实体? XML 实体允许定义标签,在解析 XML 文档时这些标签将被内容替换。一般来说,实体分为三种类型: 内部实体 外部实体 参数实体。 必须在文档类型定义(DTD)中创建实体 一旦 XML 文档被解析器处理,它将js用定义的常量“Jo Smith”替换定义的实体。正如您所看到…

SystemC入门完整编写示例:全加器测试平台

导读: 本文将完整演示基于systemC编写一个全加器的测试平台。具体内容包括&#xff1a;激励平台&#xff0c;监控平台&#xff0c;待测单元的编写&#xff0c;波形文件读取。 1&#xff0c;main函数模块 搭建一个测试平台主要由&#xff1a;Driver, Monitor, DUT(design under …

【实验记录】为了混毕业·读读论文叭

PR曲线 1. Robust_Place_Recognition_using_an_Imaging_Lidar 在第三节方法中&#xff0c;提到了一些列处理步骤&#xff0c;分析来与vins相似&#xff0c;在vins中是关键帧检索、特征提取、DBoW查询、描述子匹配、PnP RANSAC求解。 第四节的实验部分&#xff0c;没有绘制pr…

Aop自定义注解生成日志

Aop自定义注解生成日志 1.编写自定义注解 //表示此注解可以标注在方法上 Target(ElementType.METHOD) //运行时生效 Retention(RetentionPolicy.RUNTIME) public interface OpetionLog {//定义一个变量&#xff0c;可以接收参数String value() default "";}2.Cont…

MVCC详解

什么是MVCC&#xff1f; MVCC&#xff0c;即Multi-Version Concurrency Control &#xff08;多版本并发控制&#xff09;。它是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 通俗的讲&am…

【完美世界】石昊拒绝云曦相认,爱而不得,云曦悲伤无助

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界云曦篇》最新一集&#xff0c;为了云曦&#xff0c;石昊不远十万里&#xff0c;亲自送她回家&#xff0c;这份感情之真挚&#xff0c;绝对毋庸置疑。然而&#xff0c;令人感到不解的是&…