我在 Debian x86 上安装了 PG 服务器(9.0.4)。
在我的一张桌子中,我使用numeric(6,1):
CREATE TABLE mytable(name text, numfield numeric(6,1))
Run Code Online (Sandbox Code Playgroud)
还为此字段创建了索引:
CREATE INDEX mytable_numfield_idx ON mytable USING btree (numfield);
Run Code Online (Sandbox Code Playgroud)
如果我将此字段与实数值一起使用,一切都会很好。正如我看到的查询使用索引:
EXPLAIN ANALYZE SELECT * FROM kodiall WHERE kodgo=123.0
Run Code Online (Sandbox Code Playgroud)
在 mytable 上使用 mytable_numfield_idx 进行索引扫描(cost=0.00..8.27 rows=1 width=193)(实际时间=0.085..0.087 rows=1 loops=1)
索引条件:(numfield = 123.0)
总运行时间:0.131 毫秒
但是如果我使用 0.0 或 NULL 作为条件值,由于某种原因索引被忽略:
EXPLAIN ANALYZE SELECT * FROM kodiall WHERE numfield=0.0
--EXPLAIN ANALYZE SELECT * FROM kodiall WHERE numfield=NULL
Run Code Online (Sandbox Code Playgroud)
mytable 上的 Seq Scan (cost=0.00..57.80 rows=1080 width=193) (实际时间=0.033..1.853 rows=1088 loops=1)
过滤器:(numfield = …
是否可以通过索引删除 Postgres 数组元素?(使用 Postgres 9.3。)
我在文档(http://www.postgresql.org/docs/9.3/static/functions-array.html)中没有看到任何相关内容,但也许我还缺少其他功能?
我在 PostgreSQL 中有一个表,它描述了一些具有开始日期和结束日期的事件:
CREATE TABLE my_table
(
event_id serial NOT NULL,
start_date timestamp without time zone NOT NULL,
end_date timestamp without time zone NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
单个事件可能与前一个和下一个事件重叠。在下表中,4 个事件中的前 3 个形成连续的时间间隔:
1 '2015-04-02 22:09:03' '2015-04-02 22:19:05'
2 '2015-04-02 22:17:38' '2015-04-02 22:27:38'
3 '2015-04-02 22:25:21' '2015-04-02 22:36:23'
4 '2015-04-02 22:45:23' '2015-04-02 22:55:23'
Run Code Online (Sandbox Code Playgroud)
是否可以编写一个查询来检查两个给定日期之间是否存在连续的日期间隔?
我想要一些类似的东西:
select ...
from my_table
where start_date > '2015-04-02' and end_date < '2015-04-06'
Run Code Online (Sandbox Code Playgroud) 有没有办法强制所有文本数据为大写,而不必重复为每个表编写函数或在客户端执行?
我有这些整理:
postgres=# select * from pg_collation; 姓名 | collnamespace | 领主| collencoding | 整理 | 类型 ------------+--------------+-----------+--------- -----+-------------+------------ 默认 | 11 | 10 | -1 | | C | 11 | 10 | -1 | C | C POSIX | 11 | 10 | -1 | POSIX | POSIX zh_CN | 11 | 10 | 6 | en_US.utf8 | en_US.utf8 en_US.utf8 | 11 | 10 | 6 | en_US.utf8 | en_US.utf8 ucs_basic | 11 | 10 | 6 | C …
我正在想办法构建一个新的 PostgreSQL 数据库,我很好奇是否可以使用 JSONB 列而不是 EAV 模型来存储实体的属性。这似乎是一种灵活的方式来存储这些东西。
在 EAV 情况下,我将有 3 个表:
materials (mat_id, mat_name, mat_descr)
material_properties (prop_id, prop_name, prop_desc)
material_property_values (mat_id, prop_id, val)
Run Code Online (Sandbox Code Playgroud)
每种材料都可以有一组不同的属性。
有什么原因我不应该只mat_props JSONB在我的materials表中添加一列,并将所有属性存储在那里{"name":"value"}?这样,将属性作为列进行查询将非常简单:
SELECT mat_name, mat_props->'name' as propval FROM materials
Run Code Online (Sandbox Code Playgroud)
而不是连接或子选择。
另外,我是否可以在materials表中添加此列,或者将其保存在单独的表中是否会更高效:
material_properties (mat_id, properties JSONB)
Run Code Online (Sandbox Code Playgroud) 我在 PostgreSQL 9.4 中有一个表,我对其进行了分区,以便对父分区的所有插入实际上都进入其中一个子分区。问题是在创建分区之前,我的父表中已经有数亿行数据。
父级和子级存在于不同的模式中:
家长:public.history_uint
孩子:partitions.history_uint_p2015_mm_dd
TRUNCATE父母如何而不是孩子?
我不确定这是否适合这个地方,所以请随时告诉我它是否偏离主题或有更好的发帖地方。
我正在做一个基于幻想体育的项目,桌子的数量越来越多。我有诸如nba_players,nfl_players等和nba_players_to_teams,nfl_players_to_teams等表(NBA 和 NFL 分别是篮球和美式橄榄球联盟)。这些都共享相同的表模式和代码库,但在不同的表上有它们的外键。
我的问题是,在这种情况下使用表继承有意义吗?“基”表将是空的,仅用于强制执行模式。对“基”表的更改会传播到从它继承的表吗?在这一点上,模式非常稳定,所以这不是一个大问题。
有没有我没有解决的想法或疑虑?我仍在阅读有关表继承及其优缺点的文章,但您拥有的任何资源都将不胜感激。
我正在处理启用了intarray扩展的 Postgres 9.4项目。我们有一个看起来像这样的表:
items
-------------------------------------
id name tag_ids
--------------------------------------
1 a car {1,4}
2 a room to rent {1}
3 a boat {1,2,4,11}
4 a wine {2}
5 emily {3}
Run Code Online (Sandbox Code Playgroud)
如果可能,我想对标签 ID 进行分组。就像获取具有tag_id“{1,2,4,11}”的所有元素的计数
tag_id count
1 3
2 2
4 2
11 1
Run Code Online (Sandbox Code Playgroud)
这可能吗?我会认为这样的交叉点:
select * from items where tag_ids && '{1,2,4,11}'
Run Code Online (Sandbox Code Playgroud)
但我需要按交集结果内的数组元素进行分组。如果我按 tag_ids 分组,它只是唯一值。
我该怎么做?
我有一个main包含以下行的表:
id | name | rank
----+--------+------
1 | Ali | a
2 | Sami | b
3 | Khan | c
4 | Kamran | d
5 | Imran | e
6 | Asad | a
7 | Nawid | v
8 | Jamil | c
9 | Usman | j
Run Code Online (Sandbox Code Playgroud)
我想计算 column 中具有某些值的行rank。例如,我想按如下方式对值进行分组:
(a,b,v)应按名称归入一组myvalues。(c,d,j)应该按名称出现在另一个组中yourvalues。(e)应该通过 name 到达另一个组extravalues。我想要的结果:
myvalues | yourvalues …Run Code Online (Sandbox Code Playgroud) postgresql ×10
aggregate ×2
array ×2
collation ×1
eav ×1
index ×1
inheritance ×1
json ×1
localization ×1
partitioning ×1
truncate ×1