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

tinlyx's questions

Martin Hope
tinlyx
Asked: 2022-05-15 13:40:28 +0800 CST

如何构造一个包含数字的jsonb?

  • 1

有没有办法构造一个只有一个数值的jsonb?

例如,

SELECT pg_typeof(('{"a":1}'::jsonb) -> 'a');

表示('{"a":1}'::jsonb) -> 'a'jsonb 类型,并且只包含一个数值1。

但是如何在不构造和破坏对象的情况下直接创建一个1jsonb呢?

直接类型转换似乎不起作用:

# SELECT 1::jsonb;
ERROR:  cannot cast type integer to jsonb
LINE 1: SELECT 1::jsonb;
postgresql-14 jsonb
  • 1 个回答
  • 397 Views
Martin Hope
tinlyx
Asked: 2021-10-30 06:57:57 +0800 CST

PostgreSQL LATERAL 连接是否需要或允许 ON 子句?

  • 0

我不经常看到与 LATERAL 连接(PostgreSQL 11+)一起使用的 ON 子句。比如官方文档有这个例子:

LATERAL 的一个简单例子是

SELECT * FROM foo, LATERAL (SELECT * FROM bar WHERE bar.id = foo.bar_id) ss;

这不是特别有用,因为它与更传统的结果完全相同

SELECT * FROM foo, bar WHERE bar.id = foo.bar_id;

从示例中,等效的常规连接有一个 ON 子句(使用 WHERE, 编写WHERE bar.id = foo.bar_id),但对于 LATERAL JOIN,连接条件似乎是“内部化的”。

我觉得这个例子并不孤单。我看到许多没有 ON 子句的横向连接用法,但没有看到太多使用 ON 子句的情况。从概念上讲,横向连接是否需要 ON 子句尚不清楚,因为每组依赖值仅连接到它们所依赖的行。使用同一文档中的下一个示例来说明:

例如,假设 vertices(polygon) 返回多边形的顶点集,我们可以识别存储在表中的多边形的靠近在一起的顶点:

SELECT p1.id, p2.id, v1, v2
FROM polygons p1, polygons p2,
     LATERAL vertices(p1.poly) v1,
     LATERAL vertices(p2.poly) v2
WHERE (v1 <-> v2) < 10 AND p1.id != p2.id;

在这里,为每个多边形生成的顶点集p1.poly仅与该多边形相关联,与任何其他多边形无关。似乎不需要使用 ON 子句指定计算结果与原始多边形之间的相关性。“连接条件”似乎隐含在横向连接中列的依赖关系中。

我无法从链接文档中找到确认是否需要使用 ON 子句,甚至是否允许 LATERAL JOIN。因此这个问题:

LATERAL JOIN 是否需要/允许连接条件(ON 子句)?

postgresql lateral-join
  • 2 个回答
  • 363 Views
Martin Hope
tinlyx
Asked: 2021-10-13 01:45:56 +0800 CST

TOAST 存储中的 PostgreSQL 阵列是否具有随机访问时间?

  • 1

这个问题与 PostgreSQL TOAST 存储和 GIS.SE 问题有关:是否应该为 PostGIS 禁用 TOAST 压缩?

基本上,我想知道对于数组元素的随机访问是否有恒定时间复杂度(O(1))的保证?

也就是说,要获得arr[n],最坏情况下的步数是需要一个常数(即O(1))还是其他东西(O(log n)等等)?

我问是因为在某些数据形式(如 PostGIS 线或栅格)中,主要数据在逻辑上是一个(坐标)数组。众所周知,一旦数据量超过一定的限制(如 500 个点),此类数据的访问时间可能会非常长。一个可能的原因是这种大小的数据被传输到 TOAST 存储,并且可能会压缩数据(例如使用main存储)。目前尚不清楚 PostgreSQL 如何预测元素的大致位置并仍然提供随机访问时间。

大多数编程语言中数组的访问时间是恒定的(O(1))。这就是使用数组的意义所在。只是出于好奇:

PostgreSQL 数组是否具有恒定的访问时间?(什么时候什么时候不?)

postgresql array
  • 2 个回答
  • 133 Views
Martin Hope
tinlyx
Asked: 2021-06-14 22:41:19 +0800 CST

为什么不能在 CREATE TYPE 中使用 PostgreSQL 标识列?

  • 0

我的印象是,每个 PostgreSQL 表都有一个与之关联的相应复合类型。但是似乎不能在CREATE TYPE语句中使用 PostgreSQL 标识列:

=> CREATE TYPE _t_type AS (id bigint GENERATED ALWAYS AS IDENTITY);
ERROR:  syntax error at or near "GENERATED"
LINE 1: CREATE TYPE _t_type AS (id bigint GENERATED ALWAYS AS IDENTI...
                                          ^

, 虽然它可以用于CREATE TABLE:

=> CREATE TABLE _t_table (id bigint GENERATED ALWAYS AS IDENTITY);
CREATE TABLE

CREATE TYPE是否存在不能或不应该在语句中使用标识列的根本原因?

(这是 PostgreSQL 14 beta1)。

postgresql identity
  • 1 个回答
  • 245 Views
Martin Hope
tinlyx
Asked: 2021-06-04 13:46:15 +0800 CST

如何自动对文本数组元素进行大小写?

  • 0

根据关于 ARRAY 构造函数的 PostgreSQL 文档:

默认情况下,数组元素类型是成员表达式的通用类型,使用与 UNION 或 CASE 构造相同的规则确定(参见第 10.5 节)。您可以通过将数组构造函数显式转换为所需类型来覆盖它,例如:

SELECT ARRAY[1,2,22.7]::integer[];
  array
----------
 {1,2,23}
(1 row)

这适用于将元素转换为整数和简单类型:

SELECT ARRAY[ 'name', 1]::text[];
  array   
----------
 {name,1}
(1 row)

但转换似乎不适用于复杂元素,例如数组元素:

SELECT ARRAY[ 'name', 1, ARRAY['world']]::text[];
ERROR:  malformed array literal: "name"
LINE 1: SELECT ARRAY[ 'name', 1, ARRAY['world']]::text[];
                      ^
DETAIL:  Array value must start with "{" or dimension information.

我的问题是:

有没有办法让自动转换工作text[]?

(即无需编写即可进行上述转换SELECT ARRAY[ 'name'::text, 1::text, ARRAY['world']::text];)

postgresql array
  • 1 个回答
  • 124 Views
Martin Hope
tinlyx
Asked: 2020-04-05 11:08:44 +0800 CST

如何为 jsonb_build_object() 等异构 VARIADIC 函数编写包装器?

  • 1

我只是想知道如何在 PostgreSQL(从 12.x 开始)中为heterogeneousVARIADIC 函数编写包装函数,例如jsonb_build_object?

我能找到的大多数 VARIADIC 函数的 SQL 示例都不是异构的。VARIADIC 部分本质上是相同类型元素的数组。但我需要编写一个包装器jsonb_build_object来进行一些后期处理。这里,可变参数部分(键值列表)中的参数类型是不一样的。

目前,我写道:

my_func(jsonb_build_object(k1, v1, k2, v2, ...))

但是这个样板变得无聊......

postgresql datatypes
  • 1 个回答
  • 99 Views
Martin Hope
tinlyx
Asked: 2020-03-11 14:56:16 +0800 CST

如何在 Ubuntu 中将 PostgreSQL 扩展打包为二进制 .deb 文件?

  • 1

将 PostgreSQL 扩展打包到.debUbuntu 文件中的最简单方法是什么(截至 18.04)?

我进行了一些搜索,但发现了许多不同的建议(有些已过时)。

假设我想打包一个简单的 postgres 扩展,例如first 和 last 聚合函数。

这个 StackOverflow 答案建议人们应该首先手动创建一个目录结构,如下所示:

ProgramName-Version/
ProgramName-Version/DEBIAN
ProgramName-Version/DEBIAN/control
ProgramName-Version/usr/
ProgramName-Version/usr/bin/
ProgramName-Version/usr/bin/your_script

然后dpkg -b /path/to/the/ProgramName-Version在设置正确的文件权限后。

其他人建议使用dh-make,而Ubuntu Packaging Guid建议使用一些基于bzr.

但我认为 PostgreSQL 有自己的扩展构建基础设施,称为PGXS(从 PostgreSQL 12.x 开始)。我发现 PGXS 非常易于使用,因为我自己不必担心文件夹结构,并且make install无论 PostgreSQL 版本如何,我都会将文件复制到正确的系统目录中。

有没有办法结合上面的手动方法和 PGXS 方法来自动创建 PostgreSQL 扩展作为.deb文件?

postgresql ubuntu
  • 1 个回答
  • 272 Views
Martin Hope
tinlyx
Asked: 2019-09-20 20:35:15 +0800 CST

表示PostgreSQL中最大的浮点值?

  • 1

FLOAT8如何在 PostgreSQL中表示最大的浮点值(for )?

我需要'Infinity'::FLOAT8在转换为jsonb字段值期间替换它,因为 json不允许 NaN 和无穷大值。

C++ 有numeric_limits<double>::max(). PostgreSQL 中有没有等价的东西?

(我使用的是最新的 PostgreSQL 11/12)。

postgresql
  • 1 个回答
  • 651 Views
Martin Hope
tinlyx
Asked: 2019-05-26 14:15:24 +0800 CST

如何在函数调用中指定最后一个参数并让其他参数在声明中默认为 DEFAULT?

  • 3

我有一个有 5 个参数的函数,

  • arguments p1,并且p2是强制性的
  • 参数p3,p4和p5是可选的并且有一个DEFAULT集合

函数看起来像这样,

CREATE FUNCTION test_func(
  p1 int,
  p2 int,
  p3 int DEFAULT 3,
  p4 int DEFAULT 4,
  p5 int DEFAULT 5
)
  RETURNS int AS
$$
  SELECT p5;
$$ LANGUAGE sql;

我可以这样调用它,

SELECT test_func(1,2,3,4,5);
 test_func 
-----------
         5

但我想允许 p3 和 p4 默认并像这样调用它,

SELECT test_func(1,2,5);

有没有办法指定最后一个可选参数 ( p5) 的值而不给前面的参数 ( p3, ) 赋值p4?我不想在调用中硬编码 , 的默认值p3,因为我将来可能需要更改它们的默认值。p4test_func

postgresql functions
  • 1 个回答
  • 82 Views
Martin Hope
tinlyx
Asked: 2019-05-25 21:59:41 +0800 CST

如何在 PostgreSQL 中表达一个空的关系(或表)?

  • 2

有没有办法在 SQL 中表达一个空关系而不实际创建一个空表?

出于测试目的,我想找到一种方法来测试以下内容:

SELECT count(*) FROM (...) my_empty_table;

where 内...联生成一个空表。(我希望得到0答案)

这可能吗?

我尝试不成功:

SELECT count(*) FROM (VALUES) t;
SELECT count(*) FROM () t;

,这会产生语法错误。

和

=> SELECT count(*) FROM (SELECT) t;
 count 
-------
     1
(1 row)

(我主要使用 SQL,但我也很好奇是否有符合标准的编写方式)。

postgresql
  • 2 个回答
  • 1391 Views
Martin Hope
tinlyx
Asked: 2019-05-15 18:25:08 +0800 CST

为什么零数字的 sum() 不为零?[复制]

  • 4
这个问题在这里已经有了答案:
为什么 ANSI SQL 将 SUM(无行)定义为 NULL? (3 个回答)
3年前关闭。

对于以下查询

SELECT sum(c) 
FROM (SELECT 1 c WHERE false) t;

我认为它需要零数字的总和,因此应该返回0. (同样,我希望,例如数组聚合函数在零元素上返回一个空数组)。

然而,它正在返回一个NULL(使用 PostgreSQL 11)。

=> SELECT sum(c) FROM (SELECT 1 c WHERE false) t; 
 sum 
-----

(1 row)

这在逻辑上对我来说没有意义。

为什么零数字的总和(对于任何数字类型)不为零?这是 NULL 返回行为标准吗?

或者,也许我错过了一些东西。有什么理由必须NULL在某些极端情况下求和?

aggregate
  • 1 个回答
  • 1540 Views
Martin Hope
tinlyx
Asked: 2019-05-15 08:44:38 +0800 CST

什么时候需要 AS 关键字?

  • 5

在以下语句(PostgreSQL 11)中:

=> SELECT c cost FROM tt;
ERROR:  syntax error at or near "cost"
LINE 1: SELECT c cost FROM tt;

我得到一个错误。在字段表达式周围添加括号无济于事 ( SELECT (c) cost FROM tt;)。但是添加AS关键字可以修复它。

=> SELECT c AS cost FROM tt;
 cost 
------
    1
...

我意识到这cost是一个关键字,但我的印象是AS关键字是可选的。

从语言的角度来看,为什么AS这里需要(或有用)关键字?这里的 PostgreSQL 行为是标准的还是有记录的?

是否还有其他AS需要关键字的情况?

sql-standard postgresql
  • 1 个回答
  • 371 Views
Martin Hope
tinlyx
Asked: 2018-05-26 16:21:46 +0800 CST

将“regclass”值转换为文本时缺少“公共”架构

  • 1

我正在编写一个脚本,我需要在其中解析表的名称 (in regclass)。parse_ident()到目前为止,解析 (with ) 有效。但是,当表在public模式中时脚本会失败,因为 PostgreSQL (10.3) 会自动删除模式名称。

例如,如果表tt在非publicschemaex中,则其文本值regclass与原始值相同:

=> select 'ex.tt'::regclass::text;
 text  
-------
 ex.tt

当它在 中时public,架构名称会丢失:

=> select 'public.tt'::regclass::text;
 text 
------
 tt

有没有办法禁用此行为,或者在text不丢失模式名称的情况下转换为?

postgresql catalogs
  • 1 个回答
  • 526 Views
Martin Hope
tinlyx
Asked: 2018-05-19 14:32:12 +0800 CST

测试 PostgreSQL 数组中的元素是否存在?

  • 3

PostgreSQL中是否有一个运算符来测试一个元素是否在一个数组中?

目前,我正在以一种稍微复杂的方式进行此类测试,首先为元素构造一个单例数组,然后在数组之间使用<@运算符。

SELECT ARRAY[1] <@ ARRAY[1,2,3];

(SELECT 1 <@ ARRAY[1,2,3];不起作用)。

有没有更简洁/清晰的方法?

postgresql array
  • 2 个回答
  • 6960 Views
Martin Hope
tinlyx
Asked: 2018-05-17 21:36:25 +0800 CST

检查两个表是否具有相同的结构(兼容)

  • 2

我想知道是否有一种既定的方法来测试两个 PostgreSQL 表/关系是否具有相同的结构。换句话说,在我可以对它们执行集合操作的意义上,如何测试它们是否相互UNION ALL兼容EXCEPT?

我在 DBA.SE 和其他地方搜索,只能找到关于查找两个表的内容是否不同的问题,(例如检查两个表在 PostgreSQL 中是否具有相同的内容),或者何时知道兼容性(例如比较两个表结构相同,但会员编号不同)。但我有兴趣检查 table structure的兼容性。

我使用的是 PostgreSQL 10.3,但符合标准的方式当然更可取。

postgresql union
  • 5 个回答
  • 4199 Views
Martin Hope
tinlyx
Asked: 2018-03-23 13:02:19 +0800 CST

如何检查 PostgreSQL 表是否是临时的?

  • 2

如何编写查询来检查 PostgreSQL (10.x) 表是否为临时表?

我查看了pg_class系统表,但找不到任何关于关系是否是临时的列。

SELECT * FROM pg_class WHERE False;
 relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relfrozenxid | relminmxid | relacl | reloptions | relpartbound 
---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+--------------+------------+--------+------------+--------------
(0 rows)
postgresql system-tables
  • 1 个回答
  • 1664 Views
Martin Hope
tinlyx
Asked: 2018-03-21 15:36:56 +0800 CST

如何在 PostgreSQL 中获取 regprocedure 的函数名?

  • 3

我正在尝试编写一个函数来获取与给定regprocedure变量关联的函数的名称,如下所示:

CREATE OR REPLACE FUNCTION get_funcname(_fn regprocedure)
  RETURNS text AS
$func$
  SELECT proname::text
  FROM pg_catalog.pg_proc AS p
  JOIN pg_catalog.pg_namespace AS ns
    ON p.pronamespace = ns.oid
  WHERE p.oid = _fn;
$func$  LANGUAGE sql;

我希望得到my_func回报

SELECT get_funcname('my_func(text, variadic text[])');

然而,以上是给我的错误:

ERROR:  syntax error at or near "variadic"
LINE 1: SELECT get_funcname('my_func(text, variadic text[])');
                                ^
CONTEXT:  invalid type name "variadic text[]"

任何人都可以帮助解释如何修复函数或语法吗?

postgresql functions
  • 1 个回答
  • 747 Views
Martin Hope
tinlyx
Asked: 2018-03-20 04:15:42 +0800 CST

如何将一个集合或未命名的关系传递给 PostgreSQL 函数?

  • 1

在 PostgreSQL 中,有 Set-Returning-Functions (SRF)。但我想知道是否还有一种方法可以将未知关系传递给函数?换句话说,除了传递元组集的名称之外,是否可以编写Set-Taking-Functions (可以这么说) ?

显然,存在可以传递表名的动态 SQL。使用pgRouting,甚至可以使用整个字符串将元组集传递给函数:

SELECT * FROM shortest_path('
   SELECT gid AS id, 
          start_id::int4 AS source, 
          end_id::int4 AS target, 
          shape_leng::float8 AS cost
   FROM network',
1,
5110,
false,
false);

但是参数中的SQL字符串似乎不太安全。另一种可能是先将结果存储到临时表中,并传递临时表的名称,这似乎违背了SQL中基于集合编程的思想。

有没有其他方法可以将集合传递给函数?

postgresql
  • 1 个回答
  • 680 Views
Martin Hope
tinlyx
Asked: 2018-03-17 23:43:44 +0800 CST

测试一个字符串是否是一个有效的、不带引号的标识符?

  • 3

我只是想知道是否有一种既定的方法来测试字符串是否可以用作不带引号的PostgreSQL 标识符?(不加引号是因为几乎任何字符串都可以是带引号的标识符)。

我问是因为如前一个问题(How to quote qualified table name with format() function?)所示,有时我需要指定一个标识符(例如要创建的表的名称)而不是还存在,作为字符串值 ( text) 而不是更安全的类型,例如regclass. 引用字符串/名称可能会出现问题,如此处和其他地方所示。没有引用,它容易受到 SQL 注入的影响。

我想如果一个程序足够难,最终可以编写一个字符串解析函数。只是想检查是否有现有的解决方案。

有关的:

PostgreSQL 模式名称的有效格式是什么?

函数 PARSENAME() 是 QUOTENAME() 的对立面吗(sql-server)

postgresql string
  • 1 个回答
  • 409 Views
Martin Hope
tinlyx
Asked: 2018-03-15 20:55:56 +0800 CST

什么时候在 PL/pgSQL 函数中需要 SELECT?

  • 1

在 PL/pgSQL 中将函数或表达式的结果赋值给变量时,什么时候需要使用SELECT语句(子查询)?

这可能只是我对 SQL 的误解。我认为一切都应该包含在 a 中(SELECT ...)(即使它只涉及计算一个数字),例如

$$
DECLARE parts text[];
BEGIN
  parts := (SELECT string_to_array(my_str,'_') );
...
$$

但我只是发现它没有SELECT:

parts := string_to_array(my_str,'_');

(就好像我可以像使用 Pascal 一样使用 PL/pgSQL。)

一般情况下,什么样的表达式可以不SELECT计算值而直接使用?

postgresql plpgsql
  • 2 个回答
  • 68 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