假设我需要一个查询来按月查看销售结果,并且我希望结果集包含每个月的结果,无论该月是否有任何销售。
假设我的表“sales”有“sales_date”和“sales_amount”列,我希望结果集如下所示:
一月 100.00
二月 240.00
三月 0.00
四月 430.00
因此,如果我想按月对值求和并且没有任何 Mar 的记录,我仍然希望看到 Mar 的结果为 0。我该怎么做?
我遇到的一些表没有任何NOT NULL约束,这在查询时产生了一些问题。
我很好奇使用类似的东西是什么感觉NOT NULL DEFAULT '',它会coalesce()在检索/过滤记录时取代函数的需要。另一方面,不是合并,你必须使用CASE语句,或者,如果你仍然想使用合并,你会做类似的事情coalesce(nullif(field_foo,''), field_bar)
我有一个两列应该引用另一个表中的两列。这两列不是主键。我想我不能使用外键,因为它只能引用主键。
我需要计算按不同标准分组的范围,并且希望将所有内容都保留在我的数据库中。我正在寻找 PostgreSQL 的预构建 bitset 实现,或者有关如何实现目标的指针。
我目前正在做的是将 EWAHCompressedBitSet 的序列化 Java 实例存储在 bytea 列中,但这意味着我必须往返于 Java 进程才能继续我的计算。
理想情况下,我希望能够执行以下操作:
-- Unique people reached during a time window
SELECT service_name, last_updated_at, bitset_or(followers_bs)
FROM followers
GROUP BY service_name, last_updated_at
Run Code Online (Sandbox Code Playgroud)
我使用了具有此类功能的商业解决方案(Truviso),它也是基于 PostgreSQL 的。
请注意,我确实有一个包含未压缩格式数据的表,但由于数据非常庞大(1000 万行并且还在计数),加入它所花费的时间比我想投入的时间要长。
我正在做一个必须支持两个数据库引擎的项目;SQL Server 和 PostgreSQL。
我们使用 NHibernate 作为 ORM。
我们遇到了某些查询的性能问题。使用 SQL Server 工具,我们提出了几个新的索引和统计数据,大大提高了 SQL Server 的性能。但是,我不确定如何在 PostgreSQL 上实现相同的索引和统计信息。
两个例子是:
CREATE STATISTICS [perfStat_Answer_02] ON [dbo].[Answer]
([InclusionExpressionGroupId], [QuestionId], [AnswerId])
CREATE NONCLUSTERED INDEX [perf_Answer_01] ON [dbo].[Answer]
(
[QuestionId] ASC
)
INCLUDE (
[AnswerId],
[InclusionExpressionGroupId],
[AnswerConceptId],
[Revision],
[AnswerText],
[AnswerOrder]
)
WITH (
SORT_IN_TEMPDB = OFF
, IGNORE_DUP_KEY = OFF
, DROP_EXISTING = OFF
, ONLINE = OFF)
ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
INCLUDE如果存在这样的功能,PostgreSQL 中 d 字段的语法是什么?
我们如何添加统计信息?
阅读 PostgreSQL 文档,我不相信两者都受支持。但是,我想知道是否有任何方法可以完成类似的事情。
我在 Postgres 8.2.15 数据库中有一个表。该表膨胀到近 25GB,但在运行完真空和集群后,表的大小显着变小,远低于 1GB。几周后,它又回到了 3.5GB 并且还在攀升。
这不是一个经常删除的表,所以我不知道是什么导致了膨胀。
这仅发生在单个表上。我有一个单独的、结构相同的数据库,为相同的软件提供服务;该数据库中的表没有显示任何膨胀。
有任何想法吗?
我有一个非常大的数据库(数百万行)已被索引。我从另一个来源收到了不同的行,我需要在我的数据库中更新这些行。
我面临的问题是是否有必要再次重新索引整个数据库/表,因为这是一个非常昂贵的过程,我不希望我们的网站在被索引期间关闭。有没有更好的方法或方法将部分索引添加到原始索引中,这样我就不需要重新索引所有内容?
我使用 postgresql 9.1 作为数据库。
我有一种情况让我摸不着头脑,但我是 postgresql 的新手,所以我可能会忽略一些明显的东西。
我设置了一个测试台服务器并在 pg_hba.conf 中设置了访问权限:
local all postgres peer
local all all md5
host all all 127.0.0.1/32 trust
host all all ::1/128 md5
Run Code Online (Sandbox Code Playgroud)
然后重新启动 postgresql 服务器,之后,作为我的普通用户,我可以使用
psql -h localhost -U postgres -l
Run Code Online (Sandbox Code Playgroud)
这给了我表格列表。
在第二个系统上 pg_hba.conf 匹配其他文件。我重新启动了数据库服务器进程,但是 psql -h localhost -U postgres -l 因为我的用户产生了这个错误:
2012-03-29 23:31:17 UTC LOG: could not receive data from client: Connection reset by peer
Password for user postgres:
psql: fe_sendauth: no password supplied
2012-03-29 23:31:29 UTC LOG: could not receive data from client: Connection reset by …Run Code Online (Sandbox Code Playgroud) 我正在运行 PostgreSQL 9.1。我注意到非常糟糕的索引占用了我服务器上的大量空间,例如:
evlampts=# SELECT
pg_size_pretty(pg_relation_size('mcdata_2011_07')) AS relation_size,
pg_size_pretty(pg_total_relation_size('mcdata_2011_07')) AS total_relation_size,
pg_size_pretty(pg_indexes_size('mcdata_2011_07')) AS indexes_size;
relation_size | total_relation_size | indexes_size
---------------+---------------------+--------------
43 GB | 100 GB | 57 GB
(1 row)
Run Code Online (Sandbox Code Playgroud)
然后我可以看到,虽然其中很大一部分是主键,但我在一个索引中有 11 GB,在另一个索引中有 16 GB:
evlampts=# SELECT
pg_size_pretty(pg_relation_size('mcdata_2011_07_timestamp_idx')) AS timestamp_idx_size,
pg_size_pretty(pg_relation_size('mcdata_2011_07_host_idx')) AS host_idx_size;
timestamp_idx_size | host_idx_size
--------------------+---------------
11 GB | 16 GB
(1 row)
Run Code Online (Sandbox Code Playgroud)
如果我继续删除这些索引,我看不到操作系统中磁盘空间的显着改善:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 1.8T 1.8T 32G 99% /export/home/lando
$ psql evlampts
evlampts=# drop index mcdata_2011_07_host_idx;
DROP INDEX …Run Code Online (Sandbox Code Playgroud) 我有一个中等大小的数据库,分布在几个表上,粗略的架构是:
每个表有大约 200,000 行。
我还有一个视图,它基本上将所有这些粘合在一起,以便我可以SELECT使用一堆 ID(通常根据会话 ID 选择它们)并在一个页面上查看所有相关数据。
该视图有效,查询计划的索引利用率似乎正常,但结果并不快:
> EXPLAIN ANALYZE SELECT(*) FROM overlay WHERE test_session=12345;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Merge Right Join (cost=7.19..74179.49 rows=10 width=305) (actual time=10680.129..10680.494 rows=4 loops=1)
Merge Cond: (p.data_id = d.id)
-> Merge Join (cost=7.19..75077.04 rows=183718 width=234) …Run Code Online (Sandbox Code Playgroud) postgresql ×10
index ×3
performance ×2
vacuum ×2
join ×1
mysql ×1
psql ×1
query ×1
sql-server ×1
statistics ×1
view ×1