PostgreSQL基本使用(3)Schema

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

PostgreSQL 模式(Schema)可以理解为是一个表的集合(类似于Oracle的表空间概念)。
一个模式可以包含视图、索引、数据类型、函数和操作符等。
相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。
使用模式的优势:

  • 允许多个用户使用一个数据库并且不会互相干扰
  • 将数据库对象组织成逻辑组以便更容易管理
  • 第三方应用的对象可以放在独立的模式中,这样他们就不会与其他对象的名称发生冲突

模式类似于操作系统层的目录,但是模式不能嵌套。

默认的Schema

每创建一个数据库,其都会有一个默认的schema,名称为 public
如下示例:
创建一个 mydb2 数据库,然后查看其有的 schema

 -- 创建数据库.
mydb=# create database mydb2;
CREATE DATABASE
mydb=#
mydb=# --- 切换到 mydb2 数据库中
mydb=# \c mydb2;
You are now connected to database "mydb2" as user "postgres".
mydb2=# 
mydb2=# -- 查看持有的 schema
mydb2=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
(1 row)

mydb2=# 

创建 Schema

除了默认的 public 这个Schema,也可以创建自定义的Schema,SQL 语句如下:

 -- 创建 schema
mydb2=# create schema testschema;
CREATE SCHEMA
mydb2=# 
mydb2=# -- 在 testschema 中创建表.
mydb2=# create table testschema.test(id int, name varchar(200));
CREATE TABLE
mydb2=# 
mydb2=# -- 给 testschema 中的表添加数据.
mydb2=# insert into testschema.test(id, name) values(1001, '张三');
INSERT 0 1
mydb2=# -- 查询数据
mydb2=# select * from testschema.test;
  id  | name 
------+------
 1001 | 张三
(1 row)

mydb2=# 

若添加数据时,不指定 testschema 是否可以??
可以的 ,但是:若不指定 testschema,则表达的意思是给 public 这个schema中的 test 表添加数据。
由于当前 mydb2 这个数据库中的 public 中无 test 表,所以:若不指定 testschema将会报错

-- 如下报错的信息是:test 不存在
mydb2=# insert into test(id, name) values(1002, '小明');
ERROR:  relation "test" does not exist
LINE 1: insert into test(id, name) values(1002, '小明');
                    ^
mydb2=# 

查看 Schema

要查看当前 PostgreSQL 数据库中的所有 schema,你可以使用以下 SQL 查询:

SELECT schema_name
FROM information_schema.schemata;

这将返回一个结果集,其中包含数据库中所有 schema 的名称。请注意,这将包括 PostgreSQL 系统 schema(例如 publicpg_catalog 等)和用户自定义 schema(如果有的话)。

如果你使用的是命令行工具(例如 psql),你也可以执行以下命令来列出当前数据库中的所有 schema:

\dn

这个命令的效果与上述 SQL 查询是相同的,它会列出数据库中的所有 schema 名称。

示例:

-- 创建一个新的库 mydb3
mydb2=# create database mydb3;
CREATE DATABASE
mydb2=#  -- 切换值 mydb3
mydb2=# \c mydb3
You are now connected to database "mydb3" as user "postgres".
mydb3=# 
mydb3=# -- 查看information_schema.schemata :查询 Schema
mydb3=# select schema_name from information_schema.schemata;
    schema_name     
--------------------
 pg_toast
 pg_temp_1
 pg_toast_temp_1
 pg_catalog
 public
 information_schema
(6 rows)

mydb3=# 
mydb3=# 使用 \dn :查询 Schema
mydb3=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
(1 row)

mydb3=# 
mydb3=# 

删除 Schema

在 PostgreSQL 中,如果删除一个 schema(模式),默认情况下其中的表也会被删除。然而,这个行为可以通过设置删除模式时的选项来改变。

在 PostgreSQL 中,删除 schema 可以使用 DROP SCHEMA 命令。如果你使用以下方式删除一个 schema,那么其中的表也会被一并删除:

DROP SCHEMA schema_name CASCADE;

在上述命令中,CASCADE 选项表示级联删除,即删除 schema 的同时也删除其包含的所有对象,包括表、视图、函数等。

如果你不想删除表,而只是删除 schema,可以使用以下方式:

DROP SCHEMA schema_name;

这样会删除 schema,但是如果其中有任何对象(如表),则删除操作会失败并显示错误消息,因为默认情况下 PostgreSQL 不允许删除一个非空的 schema。

扩展

在 MySQL 中,Schema 代表的就是数据库。
在 Oracle 中,Schema 代表的就是用户账号。
在 PostgreSQL 中,Schema 可以粗略理解为 Oracle 中的表空间。

在 MySQL 中,查询 Schema 中有哪些资源?或者说:库中有哪些表?
使用如下SQL:

 show tables from 库的名称;
 或者查询 information_schema.tables

那在 PostgreSQL 中,如何查询 schema 有哪些资源?文章来源地址https://www.toymoban.com/news/detail-725623.html

-- 查询 schema 为 public 中的资源
mydb2=# select table_name from information_schema.tables where table_schema='public';
 table_name 
------------
(0 rows)

mydb2=# -- 查询 schema 为 testschema 中的资源
mydb2=# select table_name from information_schema.tables where table_schema='testschema';
 table_name 
------------
 test
(1 row)

mydb2=# 

到了这里,关于PostgreSQL基本使用(3)Schema的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询

    在PostgreSQL中,我们可以使用 SELECT DISTINCT 和 SUBSTRING 函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对 resource_version 字段的去重查询。 1. SELECT DISTINCT 语句 SELECT DISTINCT 语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在本

    2024年02月14日
    浏览(43)
  • 【PostgreSQL】数据查询-概述

    检索或从数据库中检索数据的命令的过程称为查询。在 SQL 中,SELECT 命令用于指定查询。该命令的一般语法是SELECT 一种简单的查询形式为: 假设有一个名为table1的表,此命令将从table1中检索所有行和所有用户定义的列。(检索方法取决于客户端应用程序。例如*,psql 程序将

    2024年01月23日
    浏览(48)
  • PostgreSQL 查询语句大全

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月10日
    浏览(38)
  • postgresql 查询字段 信息

    SELECT base.“column_name”, col_description ( t1.oid, t2.attnum ), base.udt_name, COALESCE(character_maximum_length, numeric_precision, datetime_precision), (CASE WHEN ( SELECT t2.attnum = ANY ( conkey ) FROM pg_constraint WHERE conrelid = t1.oid AND contype = ‘p’ ) = ‘t’ THEN 1 ELSE 0 END ) FROM information_schema.COLUMNS base, pg_class t1, pg_at

    2024年01月20日
    浏览(44)
  • 查询子节点 postgresql

    数据库为postgresql

    2024年02月12日
    浏览(26)
  • postgresql 的递归查询

    postgresql 的递归查询功能很强大,可以实现传统 sql 无法实现的事情。那递归查询的执行逻辑是什么呢?在递归查询中,我们一般会用到 union 或者 union all,他们两者之间的区别是什么呢? 递归查询的基本语法如下 其本身也是一个CTE,可以将复杂的查询逻辑进行分离,让整个

    2024年02月12日
    浏览(38)
  • PostgreSQL存储过程 postgresql如果查询出的数据为空,则设为0  或 ‘’

    PostgreSQL安装和创建用户和创建数据库 - 短毛兔 - 博客园   PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。免费和开源。 基本类型:Integer, Numeric, String, Boolean 结构类型:Date/Time, Array, Range, UUID 文档类型:

    2023年04月08日
    浏览(29)
  • 【PostgreSQL内核学习(二)—— 查询分析】

    声明 :本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL数据库内核分析》一书   在PostgreSQL中, 查询处理 是指 处理和执行SQL查询语句的整个过

    2024年02月17日
    浏览(58)
  • postgresql中基础sql查询

    postgresql命令速查 SQL使用SELECT和FROM查询表中的数据, * 表示查询全部字段; PostgreSQL提供了无表查询的扩展,使用 AS 指定别名; 使用 DISTINCT 去除查询结果中的重复值; PostgreSQL 支持两种格式的代码注释。 PostgreSQL 使用 WHERE 子句过滤表中的数据; PostgreSQL 提供了以下比较运算

    2024年02月12日
    浏览(90)
  • 【PostgreSQL内核学习(三)—— 查询重写】

    声明 :本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL数据库内核分析》一书   在前一章中,我们重点介绍了查询分析的过程,再来回顾一下

    2024年02月17日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包