PostgreSQL逻辑管理结构

news2024/11/26 12:26:11

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=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 maxdba | postgres
 public | postgres
(2 rows)

postgres=# drop schema maxdba;
DROP SCHEMA
postgres=# 
postgres=# create schema authorization postgres;
CREATE SCHEMA
postgres=# 
postgres=# \dn
   List of schemas
   Name   |  Owner   
----------+----------
 postgres | postgres
 public   | 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=# \d
             List of relations
  Schema  |    Name     | Type  |  Owner   
----------+-------------+-------+----------
 postgres | t1          | table | postgres
 postgres | t2          | table | postgres
 postgres | v1          | view  | postgres
 public   | class       | table | postgres
 public   | ipdb1       | table | postgres
 public   | ipdb2       | table | postgres
 public   | jtest01     | table | postgres
 public   | jtest02     | table | postgres
 public   | jtest03     | table | postgres
 public   | score       | table | postgres
 public   | student     | table | postgres
 public   | student_bak | table | postgres
 public   | t           | table | postgres
 public   | test02      | table | postgres
 public   | test1       | table | postgres
 public   | testtab05   | table | postgres
 public   | testtab06   | table | postgres
 public   | testtab07   | table | postgres
 public   | testtab08   | table | postgres
 public   | testtab09   | table | postgres
(20 rows)

postgres=# alter schema postgres rename to postgresold;
ALTER SCHEMA
postgres=# \dn
    List of schemas
    Name     |  Owner   
-------------+----------
 maxdba      | postgres
 osdba       | postgres
 postgresold | postgres
 public      | 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 baby
                       Table "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 baby2
                      Table "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.coloradmin.cn/o/1162421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络取证-Tomcat-简单

题干&#xff1a; 我们的 SOC 团队在公司内部网的一台 Web 服务器上检测到可疑活动。为了更深入地了解情况&#xff0c;团队捕获了网络流量进行分析。此 pcap 文件可能包含一系列恶意活动&#xff0c;这些活动已导致 Apache Tomcat Web 服务器遭到破坏。我们需要进一步调查这一…

【LeetCode:2103. 环和杆 | 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

nexus搭建npm私有镜像

假设有一个nexus服务&#xff0c;地址为&#xff1a; http://10.10.33.50:8081/ 创建存储空间 登录后创建存储空间&#xff0c;选择存储类型为File&#xff0c;并设置空间名称为 npm-private 创建仓库类型 2.1 创建hosted类型仓库 创建一个名为 npm-hosted 的本地类型仓库 2.…

SpringCloud 微服务全栈体系(十)

第十章 RabbitMQ 一、初识 MQ 1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得…

弹幕互动游戏运营模式你知道吗?

分享一个今年最新的风口项目&#xff0c;弹幕互动游戏。这种游戏类型是&#xff0c;主播真人出镜主持游戏过程&#xff0c;观众在直播间通过评论和礼物可以加入&#xff0c;并且操控游戏里的角色&#xff0c;等于是游戏和直播的结合。那普通人怎么把握这波风口呢&#xff1f; 说…

氮化硼纳米球 BN纳米球 hexagonal boron nitride

&#xff08;西&#xff09;氮化硼纳米球 &#xff08;安&#xff09;用途&#xff1a;科研 &#xff08;瑞&#xff09;平均粒径&#xff1a;50nm &#xff08;禧&#xff09;纯度&#xff1a;99.9% &#xff08;生&#xff09;比表面积&#xff1a;54.23m2/g &#xff0…

“利用Lazada API揭秘电商数据:一键获取海量商品详情!“

要使用Lazada API获取Lazada商品详情&#xff0c;您需要先注册Lazada开发者账号并获取授权码和密钥。然后&#xff0c;通过调用Lazada API的item_get接口&#xff0c;传入商品ID和国家域名后缀&#xff0c;即可获取到商品的详细信息。 以下是使用Lazada API获取Lazada商品详情…

一篇文章让你了解MySQL中的索引

索引是怎么提高查询效率的&#xff1f;可以为了提高查询效率增加索引么&#xff1f;mysql索引系统采用的数据结构是什么&#xff1f;为什么要使用B树&#xff1f;聚集索引相对于非聚集索引的区别&#xff1f;什么是回表&#xff1f;什么是索引覆盖&#xff1f;什么是最左匹配原…

BSP视频教程第28期:CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2023视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第28期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2023-11-01&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

华为防火墙 配置 SSLVPN

需求&#xff1a; 公司域环境&#xff0c;大陆客户端居家办公室需要连到公司域&#xff0c;这里可以在上海防火墙上面开通SSLVPN&#xff0c;员工就可以透过SSLVPN连通上海公司的内网&#xff0c;但是由于公司域控有2个站点&#xff0c;一个在上海&#xff0c;一个在台北&…

长距离工业RFID读写器的特点

长距离工业RFID读写器是一种特殊的RFID设备&#xff0c;能够在较远的距离内读取和写入RFID标签上的信息。这种读写器通常用于工业自动化、物流跟踪、车辆管理等领域&#xff0c;以实现高效、准确的跟踪和管理。 长距离工业RFID读写器采用先进的射频技术和信号处理技术&#xff…

C# 图解教程 第5版 —— 第14章 委托

文章目录 14.1 什么是委托14.2 委托概述14.3 声明委托类型14.4 创建委托对象14.5 给委托赋值14.6 组合委托14.7 为委托添加方法14.8 从委托移除方法14.9 调用委托14.10 委托的示例&#xff08;*&#xff09;14.11 调用带返回值的委托14.12 调用带引用参数的委托14.13 匿名方法1…

【笔记】excel怎么把汉字转换成拼音

1、准备好excel文件&#xff0c;复制需要转拼音列。 2、打开一个空白Word文档&#xff0c;并粘贴刚才复制的内容&#xff1b; 3、全选Word文档中刚粘贴的内容&#xff0c;点击「开始」选项卡「字体」命令组下的「拼音指南」&#xff0c;调出拼音指南对话框&#xff1b; 4、全…

java入门,哈希函数

一、前言 一听到哈希函数这种东西就感觉是数学&#xff0c;增加了人们的印象它很难。其中在数据结构中的HashMap的存储方式就用到了哈希函数&#xff0c;所以它也算是java的基础。看到哈希别惊慌&#xff0c;首先它只不过是个名称&#xff0c;我们理解它是个函数就行&#xff…

全球最强长文本大模型,一次可读35万汉字:Baichuan2-192K上线

大模型看书&#xff0c;从来没有这么快过。 国内大模型创业公司&#xff0c;正在技术前沿创造新的记录。 10 月 30 日&#xff0c;百川智能正式发布 Baichuan2-192K 长窗口大模型&#xff0c;将大语言模型&#xff08;LLM&#xff09;上下文窗口的长度一举提升到了 192K toke…

计算机体系结构图,冯诺依曼模型(控制器,运算器,指令集,存储器,cache),os(为什么要有os+如何管理举例,系统调用,用户操作接口)

目录 引入 硬件 -- 冯诺依曼模型 背景 早期 -- 硬件化 冯诺依曼结构 存储程序控制原理 核心思想 结构 cpu -- (运算器和控制器) 介绍 控制器 运算器 指令集 存储器 介绍 内部存储器 读写操作 高速缓冲存储器Cache 内存分类 RAM ROM 外部存储器 软件 -- …

Windows ObjectType Hook 之 ParseProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook&#xff0c;比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 ParseProcedure。文章实…

【入门Flink】- 03Flink部署

集群角色 Flik提交作业和执行任务&#xff0c;需要几个关键组件&#xff1a; 客户端(Client)&#xff1a;代码由客户端获取并做转换&#xff0c;之后提交给JobManger JobManager&#xff1a;就是Fink集群里的“管事人”&#xff0c;对作业进行中央调度管理&#xff1b;而它获…

2021上半年下午网络工程师试题

2021上半年下午网络工程师试题 试题一(共20分) 阅读以下说明&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸对应的解答栏内。 【说明】 某企业网络拓扑图如图1-1所示。该网络可以实现的网络功能有: 1.汇聚层交换机A与交换机B采用VRRP技术组网&#xff1b; 2.…