PostgreSQL表依赖性跟踪

如果你创建了一个包含许多表,并且带有外键约束、视图、触发器、函数等复杂的数据库结构。那么你就会在对象之间隐含地创建了一个依赖性的网络。比如,一个带有外键约束的表依赖于它所引用的表。

为了保证整个数据库结构的完整性,PostgreSQL保证你无法删除那些还被其它对象依赖的对象。比如,试图删除在里被订单表所依赖的产品表是不能成功的,会有类似下面的错误消息出现:

DROP TABLE products;

NOTICE:  constraint orders_product_no_fkey on table orders depends on table products
ERROR:  cannot drop table products because other objects depend on it
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

这个错误消息包含一个有用的提示:如果你不想麻烦的分别删除所有依赖对象,你可以运行:

DROP TABLE products CASCADE;

然后所有被依赖的对象都将被删除(并不删除订单表,只是删除外键约束)。如果你想检查DROP ... CASCADE会干什么,运行不带CASCADEDROP然后阅读NOTICE消息。

PostgreSQL里的所有删除命令都支持声明CASCADE。当然,具体的依赖性实体取决于对象的类型。你也可以写RESTRICT 而不是CASCADE以获取缺省的行为(防止删除那些其它对象所依赖的对象)。

注意: 根据 SQL 标准,要求至少声明RESTRICTCASCADE中的一个。实际上没有哪种数据库系统强制这一点,但是缺省的行为是RESTRICT 还是CASCADE则因系统而异。

注意: 在PostgreSQL 7.3之前的外键约束依赖性和序列字段依赖性在升级过程中都不会得到维护或者创建。所有其它的依赖性类型在从7.3版本以前的数据库升级过程中都将得到恰当的创建。

时间: 2024-10-11 15:07:18

PostgreSQL表依赖性跟踪的相关文章

POSTGRESQL表分区

最近发现POSTGRESQL的一张表(下面统称为test表)达到67G大小,不得不进行重新分区,下面记录一下步骤: 前言.查看数据表结构(表结构肯定是虚构的) CREATE TABLE test ( id integer NOT NULL DEFAULT , logday character varying, -- 登录日期 CONSTRAINT test PRIMARY KEY (id) ); 一.正式开始-在dw模式下面创建这个父亲表 CREATE TABLE dw.test ( id in

PostgreSQL表空间、模式、表、用户/角色之间的关系

PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关系 在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:CREATE ROLE kanon PASSWORD 'kanon';接着

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我的试验,并循序讲清其中关系. 首先,实验出角色与用户的关系    在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:   CRE

2.4. 向PostgreSQL表中添加行

INSERT 语句用于向表中添加行: INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27'); 请注意所有数据类型都使用了相当明了的输入格式.那些不是简单数字值的常量必需用单引号(')包围,就像在例子里一样.date 类型实际上对可接收的格式相当灵活,不过在本教程里,我们应该坚持使用这里显示的格式. point 类型要求一个座标对作为输入,如下: INSERT INTO cities VALUES ('Sa

生产环境修改PostgreSQL表索引对应的表空间

通过iostat命令发现某块磁盘的io使用率经常保持在100%,通过blkid命令获取linux raid存储盘符和挂载点的关系后,最后发现是挂载点上的一个数据库表空间在占用大io. 现象 [email protected]:~$ iostat -xm 3 |grep -v dm avg-cpu:  %user   %nice %system %iowait  %steal   %idle           11.68    0.00    3.82    8.63    0.00   75.

PostgreSQL表的基本概念

关系型数据库中的表非常类似纸面上的一张表:它由行和列组成.字段的数目和顺序是固定的,每个字段都有一个名字.行的数目是变化的(它反映了给定时刻存储的数据量). SQL 对表中行的顺序没有任何承诺.当读取一个表时,行将会以一个未指定的顺序出现,除非你明确地要求排序.这些内容在http://www.infocool.net/PostgreSQL/index.htm里介绍.另外,SQL 并不给行赋予唯一的标识,因此我们很可能在一个表中有好几个完全相同的行.这是作为 SQL 基础的下层数学模型的必然结果,

PostgreSQL表空间

postgres=# \h create tablespace Command: CREATE TABLESPACEDescription: define a new tablespaceSyntax:CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' [ WITH ( tablespace_option = value [, ... ] ) ] postgres=# create tablespa

PostgreSQL表空间的使用

一.介绍 表空间的作用就是允许数据库管理员定义一个其他非数据目录的位置存储数据库对象. 使用场景之一是,如果机器新加了ssd,但是又不够整个实例使用,可以将一些重要和使用频率高的表和索引放到ssd上,提高查询效率 二.创建表空间 先创建要保存表空间的目录 # mkdir -p /export/tablespace1 # chown -R postgres: /export/tablespace1/ 进入数据库 postgres=# \db        List of tablespaces  

postgresql 表空间创建、删除

表空间:字面上理解就是表存储的物理空间,其实包括数据库的表.索引.序列等. 可以将表空间创建在服务器的不同分区,这样做的好处有: 一.如果初始化集群所在分区已经用光,可以方便的其他分区上创建表空间已达到扩容的目的. 二.对于频繁访问的数据可以存储在性能较高.较快的磁盘分区上,而不常用的数据存储在便宜的较慢的磁盘分区上. 语法: postgres=# \h create tablespace Command:     CREATE TABLESPACEDescription: define a n