标签: postgresql

选择下一行和上一行

我有下表:

CREATE TABLE post (
  id            bigint primary key,
  thread_id     bigint,
  is_notice     boolean,
  title         text,
  content       text
)
Run Code Online (Sandbox Code Playgroud)

我使用以下查询显示列表:

SELECT * FROM post ORDER BY is_notice desc, thread_id desc, id
Run Code Online (Sandbox Code Playgroud)

然后,给定由 id(ie SELECT * FROM post where id=3)选择的帖子,我如何检索下一个和上一个帖子?

postgresql select

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

PostgreSQL选择整数类型的空字段

我有一个表,我需要为该fk_fc_id字段选择所有具有空值的行(作为删除它们的前奏),

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)
Run Code Online (Sandbox Code Playgroud)

然而这行不通

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^
Run Code Online (Sandbox Code Playgroud)

尝试Null也没有用。

如果有人对如何对此进行排序有任何建议,我将不胜感激。

postgresql

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

PostgreSQL 复合索引中的列顺序(和查询顺序)

我有一个有 50K 行的表。它实际上是一个 PostGIS 表。

查询有 4 个部分(1 个强制)(3 个可选)

  1. 具有 4 lat,long 的交叉框(地理矩形)(我使用 st_intersects)[强制]
  2. 日期字段上的日期范围(最小值、最大值)
  3. 当前使用 IN( .....) 的文件类型(一组最多 8 个文本值),但如果需要,我可以将其设为临时表。我看到很多人不喜欢IN。
  4. 国家(一个文本值)。

我预计大约有 100 - 4,000 行返回

如果我在表上创建复合索引,我应该先使用哪一列。细粒度的可能是位置(数据分布在世界各地)。我目前将其作为 GIST 索引。

其他索引将是 BTREE。

我的直觉是使用细粒度的,当然最后。例如,只有大约 12 种文件类型,因此对于索引来说这将是非常大的存储桶。

PostgreSQL 和 PostGIS 大师(了解系统内部结构的人)怎么说?


更新:

让我尖锐地回答这个问题。

  1. 我不希望任何人不得不做我应该做的工作。我太尊重你的时间了。所以我将在稍后进行解释分析。
  2. 我所寻找的只是一些指示、技巧和指导方针。
  3. 我读了这篇很棒的小帖子:https : //devcenter.heroku.com/articles/postgresql-indexes#managing-and-maintaining-indexes关于索引
  4. 我通常做的是创建 4 个单独的索引(地理框、国家/地区名称、文件类型和日期),但想看看复合查询会做什么。

请告诉我这些假设是否有误。(我对复合索引的想法很陌生)

  1. 顺序很重要。选择最能减少行的索引作为第一个索引(在我的情况下,位置(地理)是一个简单的多边形或多多边形会做得最好)。
  2. 有时查询会跳过索引。但是,如果我使用键 (#1, #2, #3, #4) 创建一个复合查询,那么即使用户创建了要求 #1, #3 的内容,规划器仍将使用单个复合查询,因为他们订购被维护。
  3. 通常我会创建三个 BTREE 查询和一个 GIST(用于地理类型)。PostGIS 不支持从多个索引类型中创建复合。所以我将不得不使用 GIST 复合索引。但这不应该伤害事情。
  4. 如果我确实创建了一些额外的复合或单值索引,那么规划器就足够聪明,可以选择最聪明的一个......
  5. Country Name 可以有大约 250 个不同的值,并且显然与位置 (geobox) 密切相关,但是如果减少行大小的下一个最佳索引是 file_type,我接下来应该使用它。我不希望用户经常在他们的查询集中使用国家或日期。
  6. 我不必担心创建 …

postgresql postgis

14
推荐指数
1
解决办法
8564
查看次数

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
查看次数

如何以扩展的树状方式对递归查询的结果进行排序?

假设您有这样的nodes表:

CREATE TABLE nodes
(
    node serial PRIMARY KEY,
    parent integer NULL REFERENCES nodes(node),
    ts timestamp NOT NULL DEFAULT now()
);
Run Code Online (Sandbox Code Playgroud)

它代表了一个标准的类似节点的树结构,根节点在顶部,几个子节点悬挂在根节点或其他子节点上。

让我们插入几个示例值:

INSERT INTO nodes (parent)
VALUES (NULL), (NULL), (NULL), (NULL), (1), (1), (1), (1), (6), (1)
     , (6), (9), (6), (6), (3), (3), (3), (15);
Run Code Online (Sandbox Code Playgroud)

现在我想检索前 10 个根节点及其所有子节点,深度为 4:

WITH RECURSIVE node_rec AS
(
    (SELECT 1 AS depth, * FROM nodes WHERE parent IS NULL LIMIT 10)

    UNION ALL

    SELECT depth + 1, n.*
    FROM nodes …
Run Code Online (Sandbox Code Playgroud)

postgresql cte order-by recursive

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

在没有表扫描的情况下向大表添加 NOT NULL 约束

尝试向NOT NULL具有 10 亿行的表添加约束。我无法承受超过几秒钟的表锁。有没有办法在alter table 语句期间防止全表扫描?我在列上创建了一个索引,希望它能被使用,但这似乎不起作用。可能是检查约束?其他选择?谢谢!

postgresql alter-table postgresql-9.3

14
推荐指数
2
解决办法
5613
查看次数

官方 PostgreSQL 大小写约定

是否有关于数据库、表和字段名称大小写的官方 PostreSQL 约定?

在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。

CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);
Run Code Online (Sandbox Code Playgroud)

postgresql naming-convention

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

在 Postgres 中,如何获取当前定义的保存点列表?

我正在使用 postgres SAVEPOINT,它在当前事务中创建一个新的保存点,并希望在连接中显示当前定义的保存点列表。

更准确地说:我想检查哪个名称不会在连接中触发“没有这样的保存点”错误。

postgresql transaction

14
推荐指数
1
解决办法
2063
查看次数

为什么将 RDS over EC2 用于 Postgres?

我有一个当前在 EC2 上运行的数据库。由于我必须将它移到更大的机器上,因此出现了使用 RDS 的问题。

价钱:

我可以按需获得带有两个 SSD(每个 16GB)、两个 vCPU 和 4GB 内存的EC2 c3.large实例,价格为每小时 0.132 美元[1]

最接近的(考虑价格)RDS机器db.m3.medium每小时 0.125 美元(单可用区)[2]。这台机器有相同数量的内存,但只有一个 vCPU [3]。此外,我将不得不为存储和 io [2]付费。

因此,这两个的价格将非常相似。

EC2 的优势:

  1. 如前所述,还有一个 vCPU。
  2. 使用 EC2 时,我可以将 Write-Ahead-Log 放在第二张磁盘上(向 db 写入大量内容时性能提升很大)。
  3. 我可以在我的 EC2 实例上运行pgbouncer(性能更高,因为我可以保持连接打开)。
  4. 我可以编辑配置文件(最终会提高性能)

RDS的优势:

  1. 自动进行每日备份。

RDS 能否覆盖 EC2 的优势(尤其是 2.)?还有其他优点吗?

postgresql aws amazon-ec2 amazon-rds

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

PostgreSQL:从视图中删除列

我有一个VIEW我正在尝试为其创建进化脚本的地方,因此我可以向其中添加一列。那部分工作正常;列添加就好了。但是,反过来不起作用;删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题是这个特定的视图有很多引用,从和到,因此我不能只是DROP CASCADE该死的东西!

是否有原因我无法从给定中删除新添加的列VIEW?那么,我该怎么做才能完成这个任务呢?

(注意:这里的情况就是它们的样子,但我可以很好地看到类似的情况,也就是在许多其他情况下从视图中删除列。)

postgresql view postgresql-9.3

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