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-104401

Wildcard's questions

Martin Hope
Wildcard
Asked: 2021-10-08 11:37:36 +0800 CST

MySQL 文档中的“通过另一列”是什么意思?

  • 0

在 MySQL 文档关于避免全表扫描的部分中,MySQL 将使用全表扫描的一种情况描述如下:

您正在通过另一列使用具有低基数的键(许多行与键值匹配)。在这种情况下,MySQL 假设通过使用该键可能会执行许多键查找,并且表扫描会更快。

我很难理解这一点。

首先,我不确定是否应该将短语解析为“使用键......通过另一列”或“低基数......通过另一列”。两种解释似乎都不清晰。

我可以大致了解,如果我选择表格的很大一部分,比如 75% 或其他什么,那么索引的使用速度将比仅读取整个表格要慢(因为需要深入获取行)。但我不明白“通过另一列”与它有什么关系。

谁能解释一下这句话?

mysql documentation
  • 1 个回答
  • 27 Views
Martin Hope
Wildcard
Asked: 2019-12-28 19:45:14 +0800 CST

如何从 plpgsql 函数返回单个复合类型而不显式地重复复合类型的部分作为 OUT 参数?

  • 0

我已经在网上和通过文档进行了搜索,但更常见的用例似乎是返回 SETOF 某些特定的行类型,而不仅仅是单行。

下面的用例对于说明来说是微不足道的,因为我只是想确定这在 plpgsql 中是否可能,并理解用于它的语法。(就像 Postgresql 文档包含返回一组静态固定值的函数示例一样,这里的重点不是用例而是语法。)

有了这张表:

create table my_table (f1 int primary key, f2 text, f3 real, f4 text, f5 bool);

可以创建以下函数:

create function my_func1(f1_to_look_up int) returns my_table
language sql
as $$ select * from my_table where f1 = f1_to_look_up $$;

此外,这可以像这样在 plpgsql 中完成,使用显式输出参数(并f1在子句中显式指定where以避免歧义):

create function my_func2(f1_to_look_up int, out f1 int, out f2 text, out f3 real, out f4 text, out f5 bool)
language plpgsql
as $$
begin
  select * into strict f1, f2, f3, f4, f5
    from my_table where my_table.f1 = f1_to_look_up;
  return;
end
$$;

有没有办法在 plpgsql 中完成同样的事情,而无需重复定义my_table以列出所有 OUT 参数?

plpgsql
  • 2 个回答
  • 1042 Views
Martin Hope
Wildcard
Asked: 2018-05-04 18:24:49 +0800 CST

如何找出排除约束应该使用什么运算符类和访问方法?

  • 3

最初的目标:创建一个约束以确保特定 Postgres 表中只存在不重叠的子网。

通过仔细阅读文档,我可以做到这一点:

create table subnets (
subnet cidr,
exclude (subnet with &&)
);

但这不起作用。它产生了难以理解的信息:

ERROR:  operator &&(inet,inet) is not a member of operator family "network_ops"
DETAIL:  The exclusion operator must be related to the index operator class for the constraint.

尽管阅读了有关运算符类和索引以及索引类型的文档部分,但我仍然觉得我错过了一个被认为是理所当然的整个解释部分。我仍然不知道什么是操作员类,真的,也不是操作员家族。

我确实在邮件列表上找到了一个代码片段,该代码片段导致以下工作代码:

create table subnets (
subnet cidr,
exclude using gist (subnet inet_ops with &&)
);

但我无法真正理解“使用要点”的用途,也无法真正理解“inet_ops”的用途。

我知道“使用要点”与索引类型有关。我知道索引是为“唯一”约束自动创建的,我猜也可能为“排除”约束自动创建索引。 关于“操作员类”的唯一文档都与索引有关,而不是约束。

对于我想要排除约束的这个或未来的查询,我如何确定应该指定什么运算符类和访问方法才能使约束起作用?

请注意,即使手头有工作代码,我也无法找到为什么它是“gist”而不是其他东西,以及为什么它是“inet_ops”而不是“network_ops”或什么都没有。 \doS并且操作员类文档中列出的查询令人费解。

我产生的另一个错误也令人费解:

vagrant=# create table subnets (
subnet cidr,
exclude using gist (subnet with &&)
);
ERROR:  data type cidr has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.

(这个问题的前提是我不应该求助于复制和粘贴咒语;彻底审查文档并仔细阅读错误消息应该可以让我解决问题。对于 Postgres,这在以前一直是正确的。)

database-design postgresql
  • 1 个回答
  • 2641 Views
Martin Hope
Wildcard
Asked: 2017-12-23 17:59:29 +0800 CST

在已打开的交易中是否仍然可以使用已删除(或更改)的功能?

  • 7

我发现

  • PostgreSQL - 在不同事务中使用时,CREATE FUNCTION 和 DROP FUNCTION 是否锁定?

但是没有答案,并且与我的问题不完全相同(尽管非常相似)。


假设我执行以下操作:

  1. 创建函数myfunc()
  2. 从客户 A 开始交易
  3. 从客户 B 开始交易
  4. 在事务B中,使用“create or replace function”修改定义myfunc()
  5. 提交事务 B
  6. myfunc()从事务 A调用

第 6 步会发生什么? 我是在调用第 1 步中定义的原始函数吗?还是第 4 步中的修改形式(在第 5 步中提交)?


如果函数在第 4 步中被删除而不是被修改,第 6 步会失败还是成功?(这可能是同一个问题,但修改可能会有所不同。)


关于这个的文档在哪里?

postgresql transaction
  • 2 个回答
  • 264 Views
Martin Hope
Wildcard
Asked: 2017-12-22 00:25:04 +0800 CST

如何使函数返回动态命名的列?

  • 2

简单的伪代码示例:

create function myfunc (someparam text, desired_return_column_name text)
returns table (somekeyname int, MAGIC_DYNAMIC_NAME text)
language SQL
as $funcdef$
  select
    somekeyname,
    fieldofinterest as <MAGIC HERE?> desired_return_column_name
  from the_base_table
  where some_other_field = someparam
$funcdef$;

在英语中,如何使 Postgres (9.6) 中的 SQL 函数返回一个具有静态定义类型的表,但其中一个返回的列名是根据传入的参数命名的?

如果 SQL 函数无法做到这一点,那么 PL/pgSQL 函数是否可以?

postgresql functions
  • 1 个回答
  • 2028 Views
Martin Hope
Wildcard
Asked: 2016-11-05 16:11:23 +0800 CST

Postgres FROM 子句中的列别名?

  • 6

我正在阅读 Postgres 文档、关于 SELECT 语句的页面,并且遇到了我从未遇到过的别名方面的问题。

在FROM 子句的部分,副标题alias,有一句话说明:

如果编写了别名,则还可以编写列别名列表来为表的一个或多个列提供替代名称。

文档中没有我能找到的示例。

我知道如何将输出名称设置为别名,但这似乎不是一回事。


SELECT 的概要包括以下几行:

... SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] * |expression[ [ AS ]output_name] [, ...] [ FROMfrom_item[, ...] ] ...

并定义from_item为:

其中 from_item 可以是以下之一:

[ ONLY ]table_name[ * ] [ [ AS ]alias[ (column_alias[, ...] ) ] ] (select) [ AS ]alias[ (column_alias[, ...] ) ] ...(other forms omitted)...

请注意,from_item实际上包括 column_alias.


对我来说,( select )可以在 FROM 子句(而不仅仅是 output_names,在 SELECT 语句的“表达式”中)为表单赋予列别名是有意义的,因为在大多数情况下,子查询的“列”将被显式选择因此序列将是已知的。所以我想在这种情况下 column_alias 值可能只是一个名称列表,并且它们将按顺序与子查询返回的列匹配。(虽然一个例子会很好。)

但是,如何将列别名用于 table_name? 您是否必须知道表中定义的列的确切顺序,或者您可以在 FROM 子句中为其中的一两个设置别名?

如果您只想column_alias为一个名称很长的列设置 a(并且不为其他列设置别名)怎么办?这可能吗?(如果是这样,这个 Postgres 是特定的吗?)

postgresql alias
  • 1 个回答
  • 4186 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