AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-271541

Sergey Zolotarev's questions

Martin Hope
Sergey Zolotarev
Asked: 2025-03-26 18:39:53 +0800 CST

Postgres 是否会在发生错误时中止事务(需要参考)?

  • 5

Postgres 是否会在发生错误时中止当前事务?无论如何,你能提供参考吗?

谷歌搜索“site:postgres.org 事务中止回滚错误”没有结果,并且 GPT 出现了幻觉。

我在 StackOverflow 上发现了这个说法,但没有任何证据支持它。

每当任何 SQL 语句因错误而终止时,Postgres都会自动中止事务

当单个约束失败时,如何告诉 PostgreSQL 不要中止整个事务?

我也发现了这一点。它很相似但又不同,因为我没有抛出任何异常(此外,“通常”会让人感到困惑)。

level 选项指定错误的严重性。允许的级别为 DEBUG、LOG、INFO、NOTICE、WARNING 和 EXCEPTION,其中 EXCEPTION 为默认值。EXCEPTION 会引发错误(通常会中止当前事务);其他级别仅生成不同优先级的消息。特定优先级的消息是否报告给客户端、写入服务器日志或两者均由 log_min_messages 和 client_min_messages 配置变量控制。有关更多信息,请参阅第 19 章。

postgresql
  • 3 个回答
  • 48 Views
Martin Hope
Sergey Zolotarev
Asked: 2025-02-26 20:04:41 +0800 CST

没有使用 WHEN 的隐式类型转换

  • 8

我们的应用程序有时必须动态创建 SQL 查询,包括ORDER BY类似这样的子句:

ORDER BY CASE t.ID
    WHEN 895 THEN 1
    WHEN 643 THEN 2
END

问题t.ID通常出在NUMBER列上 — — 但很少出在VARCHAR列上(取决于表,提醒您,表是动态的)。

当发生这种情况时,我们会收到如下错误(下面是本地化版本,但很容易弄清楚):

SQL 错误 [932] [42000]: ORA-00932: несовместимые типы данных: ожидается CHAR, получено NUMBER

尽管我们的 RDBMS 可以执行隐式类型转换,但显然它无法工作WHEN(出于某种原因)。我在文档中没有找到任何关于它的提及(欢迎您提供这样的参考)。

以下是复现脚本(该示例确实有些牵强):

create table "user"(
  id VARCHAR(50),
  name VARCHAR(50)
);
insert into "user"
values ('1', 'John Doe'),
  ('2', 'John Roe'),
('3', 'Jane Doe');
select * from "user"
order by case id
  when 1 then 1
  when 2 then 2
end;

用这个替换最后一个脚本以使其工作

select * from "user"
order by case id
  when '1' then 1
  when '2' then 2
end;

您的建议是什么?

Oracle DB、Postgres(我们两者都使用)。

¹除了“永远不要依赖隐式类型转换”

postgresql
  • 3 个回答
  • 275 Views
Martin Hope
Sergey Zolotarev
Asked: 2023-11-05 19:23:30 +0800 CST

PostgreSQL 中 FETCH FIRST 和 FETCH NEXT 有什么区别?

  • 7

FETCH FIRSTPostgreSQL和PostgreSQL之间有什么区别FETCH NEXT?文档只是说

NEXT 获取下一行

FIRST 获取查询的第一行

这没什么解释。我创建了一个包含示例行的示例表,并执行

SELECT * from users
FETCH FIRST 2 ROWS ONLY;
SELECT * from users
FETCH NEXT 2 ROWS ONLY;

并得到完全相同的输出。它几乎就像 ifFETCH FIRST和FETCH NEXT只是同义词LIMIT(我读到,它不是 SQL 标准的一部分,与 不同FETCH [FIRST|NEXT])

如果两者相同,为什么文档不这么说?还是毕竟存在一些差异?

这个 Stack Overflow 答案意味着它们至少在某些 RDBMS 中可能以相同的方式运行,特别是在 MS Server 中

postgresql
  • 1 个回答
  • 103 Views
Martin Hope
Sergey Zolotarev
Asked: 2023-04-16 05:24:54 +0800 CST

如何在 MySQL 中用一条 SQL 语句填充连接表?

  • 5

我有这些桌子

CREATE TABLE users
(
    id         INT          NOT NULL AUTO_INCREMENT,
    username   VARCHAR(15)  NOT NULL UNIQUE,
    password   VARCHAR(200) NOT NULL,
    name       VARCHAR(15)  NOT NULL,
    last_name  VARCHAR(25)  NOT NULL,
    department VARCHAR(50)  NOT NULL,
    salary     INT,
    age        TINYINT      NOT NULL,
    email      VARCHAR(50),
    enabled    TINYINT      NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE roles
(
    id   INT         NOT NULL AUTO_INCREMENT,
    role VARCHAR(15) NOT NULL UNIQUE,
    PRIMARY KEY (id)
);

还有它们之间的连接表

CREATE TABLE user_role
(
    user_id  INT         NOT NULL,
    username VARCHAR(15) NOT NULL,
    role_id  INT         NOT NULL,
    role     VARCHAR(15) NOT NULL,
    PRIMARY KEY (user_id, role_id),
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (role_id) REFERENCES roles (id)
);

如何用一条SQL语句来填充它?

假设,users表有这些值(ids是自动生成的)

VALUES ('mickey_m', '$2y$10$i5SJc2KAriHGn7Dz2rRQHuQ3JfBxlzMaPVKP1YdEJCukryDY9NbVC',
        'Mickey', 'Mouse', 'sales', 180000, 95, 'mickey_m@gmail.com', 1),

       ('donald_d', '$2y$10$E6SHpAN0aZGQ43HAO.TPiO27kDKXOGIgDc8xWDJdl2Prn2wzQzz5y',
       'Donald', 'Duck', 'information technology', 190000, 89, 'donald_d@outlook.com', 1),

       ('scrooge_m', '$2a$10$ycVpl2BSD6o19wa3xXtmrOxc8qZjwoIk.e3oZqgQBOE.3NHANAYqa',
       'Scrooge', 'McDuck', 'board of directors', 700000, 76, 'scrooge@gmail.com', 1)

假设,我希望每个人都有一个USER角色,并且scrooge_m也都有一个ADMIN角色。连接表应该看起来像这样(加上id我在编写 SQL 语句时可能不知道的 s)

用户身份 用户名 角色 ID 角色
米奇_m 用户
唐纳德_d 用户
斯克鲁奇_m 用户
斯克鲁奇_m 行政

我的明显错误尝试如下(我没有测试它,但它看起来是错误的 - 不过,IDE 在这里没有突出显示任何内容)。我曾经INSERT IGNORE考虑过这些行可能已经存在的可能性

INSERT IGNORE INTO user_role
WITH user_to_role(user, role) AS ( VALUES ROW('mickey_m', 'USER'),
                              ROW('donald_d', 'USER'),
                              ROW('scrooge_m', 'USER'),
                              ROW('scrooge_m', 'ADMIN')
SELECT users.id, users.username, roles.id, roles.role FROM users JOIN
    roles ON users.username = user_to_role.user AND roles.role = user_to_role.role;

当我在dbfiddle上运行它时,我得到

Unknown column 'user_to_role.user' in 'on clause'
mysql
  • 2 个回答
  • 77 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve