postgres 函数和 BEGIN 事务

2023-12-24

我对 postgres 的功能和事务如何工作有一些疑问。

目前我的函数如下所示:

CREATE OR REPLACE FUNCTION test_function(some_id character varying)
    RETURNS character varying AS
$BODY$
BEGIN
    S1;
    S2;
    S3;
    .
    .
    Sn;
RETURN some_id;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

语句可以是INSERT, UPDATE或普通SELECT查询基于some_id。据我从 postgre 了解到文档 https://www.postgresql.org/docs/9.5/static/sql-begin.html,此函数中的所有语句都作为单个事务执行并在 END 时提交。

我的问题是:

  1. 如果可以说S1是成功的但是S2失败,将S1承诺吗?
  2. 我的理解是,之后的所有陈述BEGIN作为单个事务执行,对吗?
  3. 在没有明确说明的情况下COMMIT before END并且所有语句都成功,无论 autocommit = on/off 是否都会提交事务?
  4. 可以说S1, S2, S3都是INSERT声明。S1 and S2成功但是S3失败,将插入S1, S2在没有明确说明的情况下可以逆转ROLLBACK陈述?

谢谢你!


按编号回答:

  1. No; if S2失败,整个事务被中止,只能回滚。

  2. 很可能存在误会。 SQL语句BEGIN启动交易与启动交易完全不同BEGIN启动 PL/pgSQL 块。后者确实not开始交易。

    如果没有明确的 SQL 命令BEGIN,每个语句都在自己的事务中运行(“自动提交”)。

    函数中的所有语句都在单个事务中执行。

  3. 你不能有COMMIT (or ROLLBACK)在一个函数中。

  4. 是的。这与1. 是同一个问题,只是是否定的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

postgres 函数和 BEGIN 事务 的相关文章

  • PostgreSQL 在递归查询中找到所有可能的组合(排列)

    输入是一个长度为 n 的数组 我需要生成数组元素的所有可能组合 包括输入数组中元素较少的所有组合 IN j A B C OUT k A AB AC ABC ACB B BA BC BAC BCA 随着重复 所以AB BA 我尝试过这样的事情
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • 使用 MacPorts 在 Mac OS X 10.5 上安装 PostgreSQL 时出错

    我已经使用 MacPorts 在几台不同的计算机上安装了 PostgreSQL 没有问题 但是当涉及到我自己的笔记本电脑时 我无法构建它 当我执行此命令时 sudo port install postgresql83 我收到此错误 chec
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • 使用 PostGIS 拥有通用 GEOGRAPHY 列

    在 PostgreSQL 9 PostGIS 1 5 中 有没有办法创建 通用 GEOGRAPHY 列 我指的是接受 POINT 以及 POLYGON LINESTRING 等的列 到目前为止 我只在 Internet 上看到过像 GEOG
  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • 将DataTable批量插入postgreSQL表中

    在 SQL 中 我们执行类似的操作来批量插入数据表 SqlBulkCopy copy new SqlBulkCopy sqlCon copy DestinationTableName strDestinationTable copy Wri
  • SELECT 在 PL/pgSQL 函数中引发异常

    我想在函数内实现循环 但收到此错误 ERROR 查询没有结果数据的目标 代码 CREATE OR REPLACE FUNCTION my function ill int ndx bigint RETURNS int AS DECLARE
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • PostgreSQL函数中sql语言和plpgsql语言的区别

    我很新数据库开发所以我对下面的例子有一些疑问 函数 f1 语言 SQL create or replace function f1 istr varchar returns text as select hello varchar istr
  • Rails 中 WHERE 子句中的 ALL 运算符

    关联关系如下图所示 InstructorStudent has many fees Fee belongs to instructor student 我想要获得在所有给定数组中具有每月详细信息的指导学生 如果其中任何一个中不存在每月详细信
  • 连接所有 PostgreSQL 表并创建 Python 字典

    我需要加入allPostgreSQL 表并将它们转换为 Python 字典 数据库中有72张表 总列数大于1600 我编写了一个简单的 Python 脚本 该脚本连接多个表 但由于以下原因无法连接所有表内存错误 https gist git
  • 如何编写不返回任何内容的 postgres 存储过程?

    如何在 postgres 中编写一个根本不返回值的简单存储过程 即使使用 void 返回类型 当我调用存储过程时 我也会返回一行 CREATE FUNCTION somefunc in id bigint RETURNS void AS B
  • 配置 PostgreSQL 仅适用于 LOCALHOST 或指定的 ip + 端口 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想将 PostgreSQL 配置为仅接受来自指定 IP 的连接 它不应接受来自任何其他 IP 的请求 以下示例 pg hba conf
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • postgresql ON CONFLICT 具有多个约束

    有一个约束违规处理 冲突时 语句 如果我想检查 1 个 约束 则工作正常 例如 INSERT INTO my table co1 col2 colN VALUES ON CONFLICT col1 col2 DO NOTHING or up

随机推荐

  • 在 ASP.NET 中转换/访问 QueryString 值

    我很好奇每个人在 ASP NET 中处理 抽象 QueryString 时都做了什么 在我们的一些网络应用程序中 我在网站上看到了很多这样的内容 int val 0 if Request QueryString someKey null v
  • IllegalStateException:存储实体 时发生错误 实体副本 已分配给不同的实体

    经过大量谷歌搜索后 除了降级休眠版本之外 我没有找到问题的答案 但我在 2003 年类似的帖子中遇到了这种情况 问题是什么 in the first session I do session1 save entity session1 ge
  • OAuth 2 与 spring security 并在重定向中设置 State 参数

    我将 Spring boot 与 Spring security 结合使用 并通过 OAuth 2 身份验证调用 CIAM 服务器的自定义 Filter 类 我想显式设置或覆盖默认设置 以便可以在 Spring Security 在后台准备
  • Yocto - 根据图像类型选择正确的配置文件

    在我相当标准的 Yocto 构建中 我有openssh包括 它的配置文件 etc ssh sshd config 对于生产和开发映像自然应该是不同的 例如 希望在开发映像上进行 root 登录 而不是在生产映像上登录 生产和开发映像是不同的
  • EventEmitter.call() 的作用是什么?

    我看到了这个代码示例 function Dog name this name name EventEmitter call this 它 继承 自 EventEmitter 但是 call 方法实际上做了什么 基本上 Dog据说是一个具有属
  • Django .aggregate() 上的 .annotate()

    是否可以聚合查询集的注释 Models class Article models Model title models CharField max length 255 body models TextField class State m
  • AsEnumerable() 是否缓存所有结果 (LINQ)

    当我们对序列调用查询运算符时 会调用特定于序列的运算符 我的意思是如果我打电话Where lt gt 操作符开启IEnumerable lt gt 将被调用的运算符将在 Enumerable 类中定义 并且如果它被调用IQueryable
  • 如何使用 Docker 使用 Redis 配置 Spring Boot Web 应用程序

    我有一个小型 Spring Boot Web 应用程序 它将数据保存到 Redis 运行 docker compose yml 后 容器已启动 但已开启localhost 8085我有 连接已重置 Spring Boot应用程序 yml s
  • Firebase Firestore 文档更改历史记录(例如每个文档中的活动日志/更改历史记录)

    我正在尝试为我的文档创建一个活动日志系统或历史记录 因此每次修改文档中的字段时 我都想记录或保存它 以便我可以在每个文档上进行更改后查看历史记录 我怎样才能做到这一点 我不想保存每次更改的完整文档 然后有大量重复的文档 如果可能的话 我只想
  • 如何实例化不可变的相互递归对象?

    我有一个不可变的递归类型 public sealed class Foo private readonly object something private readonly Foo other might be null public F
  • 不同高度的内联块的对齐问题[重复]

    这个问题在这里已经有答案了 我试图让此处所示的块彼此对齐 但如果它们的高度不同 由于某种原因 较短的 div 会与容器 div 的底部对齐 这两个 div 都没有任何会导致此行为的填充或边距 我需要做什么才能让它们与 div 顶部对齐 ve
  • NSMutableArray 对象的总大小

    我有一个NSMutableArray包含一堆对象 我想弄清楚的是有多少内存array使用 在查看了几个地方之后 我知道了调用的大小 当我调用它时 我得到了 32 位 这是调用的大小 NSMutableArray自己反对 示例代码 NSMut
  • 如何在 Angular 单元测试中模拟窗口滚动?

    如何在 Jasmine 单元测试中模拟或模拟窗口滚动和 或设置 window pageYOffset 属性 我正在使用 Angular 1 3 Jasmine 2 1 Karma 0 12 28 和 PhantomJS 1 9 12 这是我
  • 何时在 SAS 中使用 IF 或 %IF

    我是 SAS 新手 很难弄清楚何时应使用简单的 If Then else 以及何时应使用 IF THEN ELSE 作为示例代码如下 let inFile scan sysparm 1 macro read data infile data
  • 如何为 Celery 任务实现自动重试

    在芹菜中 你可以retry任何任务 以防出现异常 你可以这样做 task max retries 5 def div a b try return a b except ZeroDivisionError exc raise div ret
  • 反序列化时BinaryFormatter和CryptoStream问题

    我在这里有点绝望了 我正在尝试将带有序列化对象的加密文件写入磁盘 然后检索该文件 解密该文件并将对象反序列化回来 更新 我将代码重构为 using Stream innerStream File Create this GetFullFil
  • 使用 ajax 无限滚动不适用于 Chrome

    好的 在对这个网站进行了大量研究之后 我编写了执行无限滚动的代码 JS window scroll function if window scrollTop window height document height alert This
  • 找不到 CatalogManager.properties

    我的 servlet 应用程序使用 XML 目录 首先我用的是org apache xml resolver tools CatalogResolver 它找到它的配置文件CatalogManager properties under WE
  • NSInMemoryStoreType 与 NSBatchDeleteRequest 不兼容吗?

    我目前正在对与核心数据交互的层进行单元测试 它保存 删除和更新Item目的 然而 我的测试试图保存一些Item然后执行批量删除一直失败 This is Item extension Item MARK Properties NSManage
  • postgres 函数和 BEGIN 事务

    我对 postgres 的功能和事务如何工作有一些疑问 目前我的函数如下所示 CREATE OR REPLACE FUNCTION test function some id character varying RETURNS charac