PostgreSQL 中的查看与准备语句

问题描述 投票:0回答:2

视图(非具体化)的处理方式是将查询存储在数据库上,并在调用该视图时执行它。

准备好的语句也以相同的方式处理,但它们绑定到特定的连接,而视图是全局可访问的。

所以我的问题是:

  1. 视图和准备好的语句之间有什么区别,除了视图在数据库中持久化而准备好的语句在连接中持久化之外?
  2. 视图提供了哪些优点,除了现在程序员必须编写更少的 SQL 代码,因为视图类似于模块化函数(或者可能在性能等方面存在缺点)?
database postgresql view prepared-statement
2个回答
2
投票

准备好的语句和视图除了将名称与 SQL 语句相关联之外没有任何共同点。

准备好的陈述有两个目的:

  • 它允许数据库缓存执行计划,这样你就不必每次执行时都计划一个频繁的语句。这是一个性能特征。

  • 它允许将语句与其参数分开,从而防止 SQL 注入。这是一项安全功能。

视图不提供上述功能。视图的特点是:

  • 视图避免在许多 SQL 语句中重复相同的子查询。这是为了代码重用。

  • 视图提供数据的抽象接口。如果基础表被重构,您只需更改视图,而使用视图的查询不必更改。这对于从数据中进行抽象很有用。

  • 视图允许用户访问其他表中不允许他们访问的某些部分。这是一项安全功能,需要您设置

    security_barrier
    选项。

所以你看,他们没有什么共同点。


0
投票

视图

  • 是基于表的命名查询。

  • 只能有SELECT语句VALUES语句,所以不能有其他语句,如

    INSERT
    UPDATE
    DELETE
    等,否则会出错。

  • 只能有单个 SQL 查询。

  • 可以通过SELECT语句的

    FROM子句
    来调用。

  • 可以与

    INSERT
    UPDATE
    DELETE
    语句一起使用来更改其基表的内容。

  • 不能有零个或多个 SQL 查询,否则会出错。

*我的帖子详细解释了一个视图。

准备声明

  • 可以创建一个准备好的语句(SQL 查询),以便稍后使用 EXECUTE 语句运行它。 *由

    PREPARE
    语句创建的准备好的SQL查询在注销后将被删除。

  • 可以有零个或多个仅类型参数。

  • 可以具有纯类型参数的别名,例如

    $1
    $2

  • 不能有多个语句(SQL查询),否则会出错。

  • 不能有命名参数,例如

    num1 INT
    num2 INT
    等,否则会出错。

*我的帖子详细解释了

PREPARE
声明。

© www.soinside.com 2019 - 2024. All rights reserved.