小编Oxf*_*ist的帖子

如何按排序顺序列出所有表列?

我知道\d table_name列出了该表的所有列,但是有没有办法按字母顺序列出它们?

postgresql table

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

仅当查询结果不为 NULL 时如何正确返回查询结果?

我正在编写一个 PL/pgSQL 函数,它为我需要检查它是否返回某些内容的查询创建一个游标。

我正在做的是这样的:

  1. 运行查询
  2. 检查它是否返回一些东西。
  3. 如果没有,请将参数加倍并再次运行查询。
  4. 否则,返回查询中的所有行。

我发现,检查,如果该查询返回的东西用光标是最好的选择,因为它(加入5个表和大量列)一个很长的查询和SELECT ... INTO不正确的顺心,因为我必须创建一个TYPE自查询具有来自一个表的列和用于距离计算的列。

问题是我目前仅使用游标来检查查询是否在我打开和关闭它的循环中返回了某些内容。一旦查询返回某些内容,我就退出循环并返回查询。我可以马上说,这是我需要的丑陋的解决方法。也许有人可以帮助我解决这个问题。

这是一些显示我目前正在做的事情的代码。

CREATE FUNCTION store_distance(
    latitude double precision,
    longitude double precision,
    radius double precision,
    tries integer
)
RETURNS TABLE(
    store_id store.id%type,
    store_name store.name%type,
    distance double precision
)
AS
$$
DECLARE
    cur_stores CURSOR FOR
        SELECT
            store.id,
            store.name,
            get_distance(latitude, longitude, store.latitude, store.longitude) distance
        FROM
            store
        WHERE
            store.latitude BETWEEN (latitude - radius) AND (latitude + radius)
            AND store.longitude BETWEEN (longitude - radius) AND (longitude + radius)
        ORDER BY …
Run Code Online (Sandbox Code Playgroud)

postgresql performance spatial plpgsql query-performance

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

如何使 PL/pgSQL 中的查询运行时与控制台查询运行时一样快?

基本上我想将查询结果分配给自定义类型属性。但是我注意到直接从 PostgreSQL 控制台查询大约需要 0.071 毫秒,并且在几次调用后函数内部为 0.400 毫秒和 0.170 毫秒。explain analyze甚至显示了第一种情况下索引的使用情况,但没有显示第二种情况。

这就是我正在做的。

CREATE OR REPLACE FUNCTION fun_isliked(
    par_client client.id%type,
    par_feed feed.id%type
)
RETURNS boolean
AS
$$
BEGIN
    RETURN (
        EXISTS(
            SELECT
                1
            FROM
                feedlike fl
            WHERE
                fl.client = par_client
                AND fl.feed = par_feed
                AND fl.state = 1
        )
    );
END;
$$ LANGUAGE plpgsql STABLE;
Run Code Online (Sandbox Code Playgroud)

以下是上述explain analyze两种情况的输出:

postgres=# explain analyze select exists (select 1 from feedlike where client = 13 and feed = 68 and state = 1); …
Run Code Online (Sandbox Code Playgroud)

postgresql performance plpgsql query-performance

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