相关疑难解决方法(0)

如何将 JSON 数组转换为 Postgres 数组?

我有一个data类型的列,json其中包含这样的 JSON 文档:

{
    "name": "foo",
    "tags": ["foo", "bar"]
}
Run Code Online (Sandbox Code Playgroud)

我想将嵌套tags数组转换为连接字符串 ( 'foo, bar')。array_to_string()从理论上讲,使用该函数很容易做到这一点。但是,此功能不接受json输入。所以我想知道如何将这个 JSON 数组变成 Postgres 数组(类型text[])?

postgresql array postgresql-9.3 json

97
推荐指数
4
解决办法
28万
查看次数

返回 PostgreSQL 中存储过程的值

我在PostgreSQL 教程上读到了这篇文章:

如果您想从存储过程返回值,可以使用输出参数。输出参数的最终值将返回给调用者。

然后我发现DZone的函数和存储过程之间存在差异:

存储过程不返回值,但存储函数返回单个值

谁能帮我解决这个问题。

如果我们可以从存储过程中返回任何内容,也请让我知道如何从SELECT主体内的语句中执行此操作。

如果我有错的地方请告知。

postgresql stored-procedures functions

15
推荐指数
2
解决办法
7万
查看次数

IS DISTINCT FROM 可以以某种方式与 ANY 或 ALL 结合吗?

是结合一个Postgres的方式IS DISTINCT FROMANY或得到同样结果的其他一些巧妙的方法?

select count(*)
from (select 'A' foo union all select 'Z' union all select null) z
where foo <> any(array[null, 'A']);

 count
-------
     1
(1 row)

select count(*)
from (select 'A' foo union all select 'Z' union all select null) z
where foo is distinct from any(array[null, 'A']);  

ERROR:  syntax error at or near "any"
LINE 3: where foo is distinct from any(array[null, 'A']);
                                   ^
Run Code Online (Sandbox Code Playgroud)

postgresql null postgresql-9.3

14
推荐指数
3
解决办法
1843
查看次数

PostgreSQL 在许多列上进行全文搜索

我需要一个基于指定字符串搜索记录的建议。

搜索字符串可以包含来自这些列的值。此字符串中的值不必以正确的顺序严格相同,并且此字符串中某些列的值可能会丢失。

搜索字符串示例:

22 Karntner Wien
Run Code Online (Sandbox Code Playgroud)

例如,我得到了前 5 条类似记录的结果。

我想我应该使用全文搜索,但我没有使用它的经验。你能告诉我如何进行吗?

postgresql full-text-search pattern-matching

8
推荐指数
1
解决办法
1万
查看次数

创建视图时关闭表名的自动限定

问题定义

我正在尝试修改共享开发数据库,​​供开发团队用于应用程序开发/测试。

大多数集体工作(表名、视图等)都存储在公共环境中模式中,但我已经为每个用户设置了模式以用作临时空间。然而,真正的目标是用户使用其架构中的对象(如果存在),然后依赖其他对象,就像今天使用 search_path 的方式一样。

例子

用一个例子可能会更好地描述这一点。假设团队正在开发一个汽车维修应用程序的数据库,其中包含一些表和视图:

public.automobiles
public.parts
public.inventory
public.mechanics
public.schedule
public.v_repairs  -- view that joins fields from all tables above
Run Code Online (Sandbox Code Playgroud)

这非常有效,但假设开发人员(例如 Sally)想要测试一项新功能,用她自己的数据集来检查视觉反馈或阈值测试。她在自己的架构中创建了一个表sally.schedule。因为默认的search_path类似于"$user",public,所以她创建的任何简单查询都会在公开之前首先检查她的架构。例如:

SELECT * FROM schedule LEFT JOIN mechanics USING(mechanic_id);
Run Code Online (Sandbox Code Playgroud)

当 sally 连接到数据库时,这将使用 public.mechanics 和 sally.schedule。这正是预期的用途,但是在保存视图时,它通过插入架构来完全限定表名称。因此,如果将上面相同的查询创建为公共模式中的视图,它将如下所示:

SELECT * FROM public.schedule LEFT JOIN public.mechanics USING(mechanic_id);
Run Code Online (Sandbox Code Playgroud)

search_path 的魔力被否定了。当Sally连接到数据库调用视图时(SELECT * FROM v_mechanics_schedule ) 时,它会忽略她创建的 sally.schedule 表,而只使用公共表。

有没有办法在保存视图时不让 Postgres 存储表/视图对象的架构名称?


注意:这是我正在研究的新事物,但我从未真正需要过它,因为开发人员通常可以克隆应用程序、复制数据库并在自己的沙箱环境中工作。不需要一些巧妙的协作模式设置

postgresql database-design execution-plan view

4
推荐指数
1
解决办法
721
查看次数

如何确定是否可以内联 SQL 函数?

这个答案中, Erwin 将IMMUTABLE函数分解为可以内联的函数和不能内联的函数。他有一个例子to_char(),表明IMMUTABLE函数 overto_char()实际上会更慢

不过这很有趣,因为我什至不知道to_char()不是IMMUTABLE。此外,我不知道这IMMUTABLE会让任何事情变得更慢。我现在的问题是,如何确定标记为IMMUTABLE内联的函数是否被内联?

postgresql performance optimization execution-plan functions

3
推荐指数
1
解决办法
312
查看次数