我有一个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 教程上读到了这篇文章:
如果您想从存储过程返回值,可以使用输出参数。输出参数的最终值将返回给调用者。
然后我发现DZone的函数和存储过程之间存在差异:
存储过程不返回值,但存储函数返回单个值
谁能帮我解决这个问题。
如果我们可以从存储过程中返回任何内容,也请让我知道如何从SELECT
主体内的语句中执行此操作。
如果我有错的地方请告知。
是结合一个Postgres的方式IS DISTINCT FROM
与ANY
或得到同样结果的其他一些巧妙的方法?
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) 我需要一个基于指定字符串搜索记录的建议。
搜索字符串可以包含来自这些列的值。此字符串中的值不必以正确的顺序严格相同,并且此字符串中某些列的值可能会丢失。
搜索字符串示例:
22 Karntner Wien
Run Code Online (Sandbox Code Playgroud)
例如,我得到了前 5 条类似记录的结果。
我想我应该使用全文搜索,但我没有使用它的经验。你能告诉我如何进行吗?
我正在尝试修改共享开发数据库,供开发团队用于应用程序开发/测试。
大多数集体工作(表名、视图等)都存储在公共环境中模式中,但我已经为每个用户设置了模式以用作临时空间。然而,真正的目标是用户使用其架构中的对象(如果存在),然后依赖其他对象,就像今天使用 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 存储表/视图对象的架构名称?
注意:这是我正在研究的新事物,但我从未真正需要过它,因为开发人员通常可以克隆应用程序、复制数据库并在自己的沙箱环境中工作。不需要一些巧妙的协作模式设置
在这个答案中, Erwin 将IMMUTABLE
函数分解为可以内联的函数和不能内联的函数。他有一个例子to_char()
,表明IMMUTABLE
函数 overto_char()
实际上会更慢。
不过这很有趣,因为我什至不知道to_char()
不是IMMUTABLE
。此外,我不知道这IMMUTABLE
会让任何事情变得更慢。我现在的问题是,如何确定标记为IMMUTABLE
内联的函数是否被内联?
postgresql performance optimization execution-plan functions