我有下表:
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)选择的帖子,我如何检索下一个和上一个帖子?
我有一个表,我需要为该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也没有用。
如果有人对如何对此进行排序有任何建议,我将不胜感激。
我有一个有 50K 行的表。它实际上是一个 PostGIS 表。
查询有 4 个部分(1 个强制)(3 个可选)
我预计大约有 100 - 4,000 行返回
如果我在表上创建复合索引,我应该先使用哪一列。细粒度的可能是位置(数据分布在世界各地)。我目前将其作为 GIST 索引。
其他索引将是 BTREE。
我的直觉是使用细粒度的,当然最后。例如,只有大约 12 种文件类型,因此对于索引来说这将是非常大的存储桶。
PostgreSQL 和 PostGIS 大师(了解系统内部结构的人)怎么说?
更新:
让我尖锐地回答这个问题。
请告诉我这些假设是否有误。(我对复合索引的想法很陌生)
是结合一个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) 假设您有这样的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) 尝试向NOT NULL具有 10 亿行的表添加约束。我无法承受超过几秒钟的表锁。有没有办法在alter table 语句期间防止全表扫描?我在列上创建了一个索引,希望它能被使用,但这似乎不起作用。可能是检查约束?其他选择?谢谢!
是否有关于数据库、表和字段名称大小写的官方 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) 我正在使用 postgres SAVEPOINT,它在当前事务中创建一个新的保存点,并希望在连接中显示当前定义的保存点列表。
更准确地说:我想检查哪个名称不会在连接中触发“没有这样的保存点”错误。
我有一个当前在 EC2 上运行的数据库。由于我必须将它移到更大的机器上,因此出现了使用 RDS 的问题。
价钱:
我可以按需获得带有两个 SSD(每个 16GB)、两个 vCPU 和 4GB 内存的EC2 c3.large实例,价格为每小时 0.132 美元[1]。
最接近的(考虑价格)RDS机器db.m3.medium每小时 0.125 美元(单可用区)[2]。这台机器有相同数量的内存,但只有一个 vCPU [3]。此外,我将不得不为存储和 io [2]付费。
因此,这两个的价格将非常相似。
EC2 的优势:
RDS的优势:
RDS 能否覆盖 EC2 的优势(尤其是 2.)?还有其他优点吗?
我有一个VIEW我正在尝试为其创建进化脚本的地方,因此我可以向其中添加一列。那部分工作正常;列添加就好了。但是,反过来不起作用;删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题是这个特定的视图有很多引用,从和到,因此我不能只是DROP CASCADE该死的东西!
是否有原因我无法从给定中删除新添加的列VIEW?那么,我该怎么做才能完成这个任务呢?
(注意:这里的情况就是它们的样子,但我可以很好地看到类似的情况,也就是在许多其他情况下从视图中删除列。)
postgresql ×10
alter-table ×1
amazon-ec2 ×1
amazon-rds ×1
aws ×1
cte ×1
null ×1
order-by ×1
postgis ×1
recursive ×1
select ×1
transaction ×1
view ×1