热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用规则在PostgreSQL中创建可查询插入修改删除的表视图

具体内容如下:要注意new.attribute和old.attribute与源表、视图属性之间的关系[root@meroot]#supostgresbash-2.05b$psql

具体内容如下:要注意 new.attribute和old.attribute 与源表、视图属性之间的关系[root@me root]# su postgresbash-2.05b$ psql

具体内容如下:
要注意 new.attribute和old.attribute 与源表、视图属性之间的关系
[root@me root]# su postgres
bash-2.05b$ psql -E -h me.linux.edu.cn mydb1
********* QUERY **********
BEGIN; SELECT usesuper FROM pg_catalog.pg_user WHERE usename = 'postgres'; COMMIT
**************************

欢迎来到 psql 7.3.2, PostgreSQL 的交互终端.

键入: \copyright 获取发布信息
\h 获取 SQL 命令的帮助
\? 获取内部反斜扛命令的帮助
\g 或者以分号结尾执行查询
\q 退出

mydb1=# \help
Available help:
ABORT CREATE TABLE EXECUTE
ALTER DATABASE CREATE TABLE AS EXPLAIN
ALTER GROUP CREATE TRIGGER FETCH
ALTER TABLE CREATE TYPE GRANT
ALTER TRIGGER CREATE USER INSERT
ALTER USER CREATE VIEW LISTEN
ANALYZE DEALLOCATE LOAD
BEGIN DECLARE LOCK
CHECKPOINT DELETE MOVE
CLOSE DROP AGGREGATE NOTIFY
CLUSTER DROP CAST PREPARE
COMMENT DROP CONVERSION REINDEX
COMMIT DROP DATABASE RESET
COPY DROP DOMAIN REVOKE
CREATE AGGREGATE DROP FUNCTION ROLLBACK
CREATE CAST DROP GROUP SELECT
CREATE CONSTRAINT TRIGGER DROP INDEX SELECT INTO
CREATE CONVERSION DROP LANGUAGE SET
CREATE DATABASE DROP OPERATOR CLASS SET CONSTRAINTS
CREATE DOMAIN DROP OPERATOR SET SESSION AUTHORIZATION
CREATE FUNCTION DROP RULE SET TRANSACTION
CREATE GROUP DROP SCHEMA SHOW
CREATE INDEX DROP SEQUENCE START TRANSACTION
CREATE LANGUAGE DROP TABLE TRUNCATE
CREATE OPERATOR CLASS DROP TRIGGER UNLISTEN
CREATE OPERATOR DROP TYPE UPDATE
CREATE RULE DROP USER VACUUM
CREATE SCHEMA DROP VIEW
CREATE SEQUENCE END
mydb1=# select * from table_tamplate ;
sname | sadds | sphon | semail
--------+--------------+--------------+------------------
小布时 | 纽约州纽约镇 | 010-84452484 | 小布时@美国.纽约
普京 | 莫斯科镇 | 020-12345678 | 普京@俄国.莫斯科
布莱尔 | 伦敦镇 | 030-12345678 | 布莱尔@英国.伦敦
希拉克 | 巴黎镇 | 040-12345678 | 希拉克@法国.巴黎
(4 行)

mydb1=# create table president() inherits(table_tamplate);
CREATE TABLE
mydb1=# select * from president ;
sname | sadds | sphon | semail
-------+-------+-------+--------
(0 行)

mydb1=# \help create view
命令: CREATE VIEW
描述: define a new view
语法:
CREATE [ OR REPLACE ] VIEW view [ ( column name list ) ] AS SELECT query

mydb1=# create view v_president(name,adds,phon,email) as select p.sname,p.sadds,p.sphon,p.semail from president p;
CREATE VIEW
mydb1=# select * from v_president ;
name | adds | phon | email
------+------+------+-------
(0 行)

mydb1=# insert into v_president values ('金大中','汉城','050-12345678','金大中@韩国.汉城');
错误: Cannot insert into a view
You need an unconditional ON INSERT DO INSTEAD rule
mydb1=# 呵呵,,看来视图目前是不能插入数据的,那么,只好用规则了!;

mydb1=# create rule r_insert_v_president AS ON insert TO v_president do instead
mydb1-# insert into president(sname,sadds,sphon,semail) values(new.name,new.adds,new.phon,email);
错误: Attribute "email" not found
mydb1=# create rule r_insert_v_president AS ON insert TO v_president do instead
mydb1-# insert into president(sname,sadds,sphon,semail) values(new.name,new.adds,new.phon,new.email);
CREATE RULE
mydb1=# insert into v_president values ('金大中','汉城','050-12345678','金大中@韩国.汉城');
INSERT 17287 1
mydb1=# select * from v_president ;
name | adds | phon | email
--------+------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@韩国.汉城
(1 行)

mydb1=# select * from president ;
sname | sadds | sphon | semail
--------+-------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@韩国.汉城
(1 行)

mydb1=# 呵呵,现在可以插入数据了!再来改写、删除!

mydb1=# create rule r_delete_v_president AS ON delete TO v_president do instead
mydb1-# delete from president where sname=old.name;
CREATE RULE
mydb1=# delete from v_president where name ~ '^金';
DELETE 1
mydb1=# select * from v_president ;
name | adds | phon | email
------+------+------+-------
(0 行)

mydb1=# select * from president ;
sname | sadds | sphon | semail
-------+-------+-------+--------
(0 行)

mydb1=# 看来删除是没有问题了!来更新!
mydb1=# create rule r_update_v_president AS ON update TO v_president do instead
mydb1-# update president set sname=new.name,sadds=new.adds,sphon=new.phon,semail=new.email
mydb1-# where sname=new.name;
CREATE RULE
mydb1=# insert into v_president values ('金大中','汉城','050-12345678','金大中@韩国.汉城');
INSERT 17290 1
mydb1=# select * from v_president ;
name | adds | phon | email
--------+------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@韩国.汉
(1 行)

mydb1=# select * from president ;
sname | sadds | sphon | semail
--------+-------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@韩国.汉
(1 行)

mydb1=# update v_president set email='金大中@汉城.韩国' where;
UPDATE 1
mydb1=# select * from v_president ;
name | adds | phon | email
--------+------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@汉城.韩国
(1 行)

mydb1=# select * from president ;
sname | sadds | sphon | semail
--------+-------+--------------+------------------
金大中 | 汉城 | 050-12345678 | 金大中@汉城.韩国
(1 行)

mydb1=# 好了,现在我们的视图 v

mydb1=# 好了,现在我们的视图可以查询、插入、修改、删除数据了!用规则还可以做触发器!;
mydb1=#

linux

推荐阅读
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文详细介绍了如何在Linux系统中创建和管理DB2数据库,包括用户切换、数据库创建、错误处理、连接与断开、表空间和缓冲池的创建,以及用户权限管理和数据导入导出等操作。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • 随着技术社区的发展,越来越多的技术爱好者选择通过撰写博客来分享自己的学习经验和项目进展。本文将介绍一个具体案例,即将一套原本运行于Windows平台的代码成功移植到Linux(Redhat)环境下的过程与挑战。 ... [详细]
  • 近期,考虑到在Vim内部进行GDB调试、运行Python脚本和数据库连接等多样化需求,思考是否可以通过集成终端来简化这些操作,而非逐一编写Vim脚本来实现。通过研究发现,确实存在一种高效的方法——利用特定插件实现终端功能的整合。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • Python编码入门指南
    本文探讨了使用Python进行网络设备连通性测试的简便性,特别是针对IP地址范围为192.168.0.101至192.168.0.200的设备。通过比较Python与Shell、Java等语言,展示了Python在执行此类任务时的优势。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
author-avatar
默默-的米线_601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有