回想第2章中的weather
和cities
表。考虑以下问题:我们希望确保在cities
表中有相应项之前任何人都不能在weather
表中插入行。这叫做维持数据的引用完整性。在过分简化的数据库系统中,可以通过先检查cities
表中是否有匹配的记录存在,然后决定应该接受还是拒绝即将插入weather
表的行。这种方法有一些问题且并不方便,于是PostgreSQL可以为我们来解决:
新的表定义如下:
CREATE TABLE cities (
city varchar(80) primary key,
location point
);
CREATE TABLE weather (
city varchar(80) references cities(city),
temp_lo int,
temp_hi int,
prcp real,
date date
);
现在尝试插入一个非法的记录:
INSERT INTO weather VALUES ("Berkeley", 45, 53, 0.0, "1994-11-28");
ERROR: insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
DETAIL: Key (city)=(Berkeley) is not present in table "cities".
外键的行为可以很好地根据应用来调整。我们不会在这个教程里更深入地介绍,读者可以参考第 5 章中的信息。正确使用外键无疑会提高数据库应用的质量,因此强烈建议用户学会如何使用它们。
目录pg_proc存放有关函数、过程、聚集函数以及窗口函数(共称为例程)的信息。更多信息请参考CREATE FUNCTION、CREATE PROCEDURE...
目录pg_tablespace存储关于可用表空间的信息。表可以被放置在特定表空间中以实现磁盘布局的管理。与大部分其他系统目录不同,pg_...
视图pg_publication_tables提供publication与其所包含的表之间的映射信息。和底层的目录pg_publication_rel不同,这个视图展开了...
视图pg_user_mappings提供有关用户映射的信息。这是pg_user_mapping的一个公共可读视图,它对无权使用的用户省去了选项域。表51....
目录58.1. 创建自定义扫描路径58.1.1. 自定义扫描路径回调58.2. 创建自定义扫描计划58.2.1. 自定义扫描计划回调58.3. 执行自定义...