标签: postgresql

创建 GroupBy 查询以在没有结果匹配时包含结果

假设我需要一个查询来按月查看销售结果,并且我希望结果集包含每个月的结果,无论该月是否有任何销售。

假设我的表“sales”有“sales_date”和“sales_amount”列,我希望结果集如下所示:

一月 100.00
二月 240.00
三月 0.00
四月 430.00

因此,如果我想按月对值求和并且没有任何 Mar 的记录,我仍然希望看到 Mar 的结果为 0。我该怎么做?

postgresql query

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

对表中所有基于文本的字段使用 NOT NULL 约束的共识是什么?

我遇到的一些表没有任何NOT NULL约束,这在查询时产生了一些问题。

我很好奇使用类似的东西是什么感觉NOT NULL DEFAULT '',它会coalesce()在检索/过滤记录时取代函数的需要。另一方面,不是合并,你必须使用CASE语句,或者,如果你仍然想使用合并,你会做类似的事情coalesce(nullif(field_foo,''), field_bar)

mysql postgresql performance

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

在 postgresql 中引用另一个表中的非主键

我有一个两列应该引用另一个表中的两列。这两列不是主键。我想我不能使用外键,因为它只能引用主键。

postgresql

4
推荐指数
2
解决办法
7337
查看次数

在 PostgreSQL 中存储位集?

我需要计算按不同标准分组的范围,并且希望将所有内容都保留在我的数据库中。我正在寻找 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 万行并且还在计数),加入它所花费的时间比我想投入的时间要长。

postgresql

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

如何在 PostgreSQL 上复制 SQL Server 索引 INCLUDE 和 STATISTICS 功能?

我正在做一个必须支持两个数据库引擎的项目;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 文档,我不相信两者都受支持。但是,我想知道是否有任何方法可以完成类似的事情。

postgresql index sql-server statistics

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

PostgreSQL 无法解释的表膨胀

我在 Postgres 8.2.15 数据库中有一个表。该表膨胀到近 25GB,但在运行完真空和集群后,表的大小显着变小,远低于 1GB。几周后,它又回到了 3.5GB 并且还在攀升。

这不是一个经常删除的表,所以我不知道是什么导致了膨胀。

这仅发生在单个表上。我有一个单独的、结构相同的数据库,为相同的软件提供服务;该数据库中的表没有显示任何膨胀。

有任何想法吗?

postgresql vacuum

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

重新索引大型数据库

我有一个非常大的数据库(数百万行)已被索引。我从另一个来源收到了不同的行,我需要在我的数据库中更新这些行。

我面临的问题是是否有必要再次重新索引整个数据库/表,因为这是一个非常昂贵的过程,我不希望我们的网站在被索引期间关闭。有没有更好的方法或方法将部分索引添加到原始索引中,这样我就不需要重新索引所有内容?

我使用 postgresql 9.1 作为数据库。

postgresql index data-warehouse

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

psql 不会列出数据库

我有一种情况让我摸不着头脑,但我是 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 psql

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

删除索引似乎不会向操作系统释放空间。它可以?

我正在运行 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)

postgresql vacuum

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

提高讨厌的嵌套视图连接的性能

我有一个中等大小的数据库,分布在几个表上,粗略的架构是:

  • 输入数据(数据 ID、会话 ID 和一些具有统计重要性的字段)
  • 输入文件(数据 ID 和 blob)
  • 阶段 1 输出文件(数据 ID 和 blob)
  • 阶段 2 输出文件(数据 ID 和 blob)
  • 类别 1 结果(数据 ID 和一些布尔值)
  • 类别 2 结果(数据 ID 和一些整数)
  • 第 3 类结果(数据 ID 和一些整数)

每个表有大约 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 performance index join view

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