标签: postgresql

删除重复行后同时计算 COUNT 和 SUM

我正在使用 PostgreSQL,我无法弄清楚对两个不同列进行 COUNT 和 SUM 的查询。基本上我正在寻找类似的东西SUM(hits DISTINCT record_id)

桌子:

status      record_id      hits     
     0            123         1
     0            123         1
     0            124         1
     0            125         1
     0            126         0
     1            123         0
     1            124         0
     1            125         1
     1            125         1
Run Code Online (Sandbox Code Playgroud)

想要的结果:

status   unique_records_count  hits_sum
     0                      4         3
     1                      3         1
Run Code Online (Sandbox Code Playgroud)

做一个

SELECT status, COUNT(DISTINCT record_id), SUM(hits)
FROM table
GROUP BY status
Run Code Online (Sandbox Code Playgroud)

返回

status   unique_records_count  hits_sum
     0                      4         4
     1                      3         2
Run Code Online (Sandbox Code Playgroud)

postgresql

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

PostgreSQL 硬件要求

高效运行 PostgreSQL 数据库服务器的内存/cpu/其他要求是什么?是一种为某种要求指定硬件配置的方法 - 例如用户数量、查询数量等?

postgresql

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

用户权限问题

嗨,我正在尝试创建一个登录角色(用户),其修改数据库的能力相当小。他们应该能够选择、删除、创建触发器、插入和更新。然后,我希望拥有多个作为用户成员的帐户,因此它们具有相同的权限,但我可以为单个用户记录编辑。

我在数据库设计中使用 pgadmin,我的程序使用 QtSQL 访问它。

尝试选择一些数据作为测试时,Qt 捕获了我收到的错误消息。当我运行与数据库所有者和超级用户相同的代码时,我没有问题。

bool run_query(const QString & q){
    QSqlDatabase db = QSqlDatabase::database("default");
    QSqlQuery query(db);

    query.exec(q);

    if (!query.isActive()){
        QMessageBox::warning(0, QObject::tr("Database Error"),
                             query.lastError().text());
        return false;
    }

    while (query.next()){
        QString title = query.value(0).toString();
        std::cerr << qPrintable(title) << std::endl;
    }
    return true;
}

run_query("Select forename from contacts;");
Run Code Online (Sandbox Code Playgroud)

错误:关系联系人的权限被拒绝 QPSQL:无法创建查询

到目前为止,我已经创建了角色(用户)。

-- Role: user

-- DROP ROLE "user";

CREATE ROLE "user" LOGIN
  ENCRYPTED PASSWORD 'md54d45974e13472b5a0be3533de4666414'
  NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
COMMENT ON ROLE "user" IS 'Low level user';
Run Code Online (Sandbox Code Playgroud)

因为这给了以前的问题。我尝试为数据库添加公共权限,但这也不起作用。

现在我不知道去哪里寻找解决方案。任何帮助深表感谢。谢谢。

postgresql role

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

如何将函数保存到 PostgreSQL 中的单个文件?

我维护一个使用 PostgreSQL 数据库的遗留应用程序。

该应用程序严重依赖于存储过程(又名函数)。

我想将这些函数保存到以函数名命名的文件中,以便我可以使用 VCS(版本控制系统)。

我知道我可以ALTER FUNCTION使用 using保存代码,PgAdmin但这一次只允许我保存一个函数。

我正在寻找一种自动保存所有功能的方法。有没有办法编写此任务的脚本?

postgresql backup version-control functions postgresql-9.1

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

是否可以在 Postgres 中包装聚合函数?

Postgres 的 string_agg(expr, delimiter) 函数很棒。但我想要一个版本,它接受一个参数——要聚合的字段——并假设分隔符为 ', ' 因为这是我想要的 10 次中的 9 次。使用非聚合函数,我可以只需这样做:

create or replace function public.string_agg(text)
returns text
as $$
    select string_agg($1, ', ');
$$ language sql
immutable;
Run Code Online (Sandbox Code Playgroud)

但由于 string_agg 是一个聚合函数,这不起作用。它抱怨我传递给它的字段需要在 GROUP BY 子句中,这告诉我查询引擎不知道我的包装器是一个聚合函数。

我查看了用户定义聚合的文档(http://www.postgresql.org/docs/9.1/static/xaggr.html 和http://www.postgresql.org/docs/9.1/static/sql-createaggregate .html ) 但我不清楚如何使用现有的 string_agg(text, text) 定义我的新 string_agg(text)。看来我必须从头开始定义我的新函数,这比我想承担的要复杂得多,而且我也不完全有信心我可以完美地反映内置 string_agg 的行为。

那么是否有一些技术可以创建一个我没有看到的简单包装器?或者我将不得不做更多的工作?

postgresql aggregate functions

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

我们应该如何处理一旦它们在 PostgreSQL 中变旧就不会被查询的行?

我们在 PostgreSQL 数据库中有一个表,它每天以数百万行的速度增长。

每行包括:

ID
Foreign user ID
Date and time
Other data
Run Code Online (Sandbox Code Playgroud)

日期和时间不是严格单调的ID,但它们很接近。

查询此表时,我们只对获取给定外部用户 ID 的行感兴趣,其中包含最近两周的日期和时间。永远不会查询超过两周的行,但我们希望保留它们以供存档。

鉴于此特殊用例:

  1. 我们应该在日期和时间列上建立索引吗?
  2. 是否有任何提示我们可以给出日期和时间(几乎)随 ID 单调增加。
  3. 我们是否应该尝试从表中删除超过两周的行,这是否可能提高性能?

postgresql performance query-performance

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

PostgreSQL:查询数据库中包含整数 [] &gt; 或 &lt; 超过指定值的行

我有一个表,它存储过去 5 天的历史温度,存储在基于城市的整数 [] 列中。问题是:如何查询值大于或小于指定值的条目?这是一个示例表:

+=========+==================+
| city    | temps            |
+=========+==================+
| Seattle | {65,72,63,56,72} |
+---------+------------------+
| Miami   | {83,75,69,72,79} |
+---------+------------------+
Run Code Online (Sandbox Code Playgroud)

假设我想查询温度高于 80 的城市。在此示例中,只有迈阿密的温度高于 80,因此只应返回该行。我尝试了一些没有成功的查询,查看了 intarray,但这似乎也不能解决我的问题。非常感谢!

我正在运行 PostgreSQL 9.1

postgresql postgresql-9.1

7
推荐指数
2
解决办法
1567
查看次数

连续归档:是否可以使用多台机器?

是否可以使用archive_command发送到多台机器?它是否像用 a 分隔一样简单,&&因为它本质上只是一个命令行?

command1 && command2
Run Code Online (Sandbox Code Playgroud)

我认为如果一个命令失败,这可能会产生不良影响,例如,如果command1失败则command2不会运行;如果command2失败,它会在整个过程中返回非零值,Postgres 会重新尝试发送 WAL,这意味着它会重新运行command1

我希望有一个更正式的解决方案来解决这个问题。我的目标是在数据中心内部备份一份,在数据中心外部备份一份。

postgresql

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

为写入繁重的 PostgreSQL 数据库服务器选择什么 AWS 实例

我们现在在处理高峰时段服务器的密集流量时遇到问题;请参阅有关调整 DB 的相关问题。目前,我们正在使用较小的云服务作为服务器托管。目前,我们正在研究将我们的服务器迁移到 AWS 的可能性。我们遇到的问题主要与我们的数据库服务器有关,因此我们希望拥有比我们现在使用的要好得多的 AWS 实例。

数据库服务器所在云服务器的统计信息如下:

  • 8核
  • 16GB 内存
  • 100 GB,RAID-10 * SAS 15.000 RPM

在选择用于 PostgreSQL 数据库服务器的亚马逊实例时,您有什么特别需要考虑的吗?

postgresql aws

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

为什么向 postgres 查询添加 smallint 列会使执行时间增加 60 倍?

在我看来,这里有一个例程表和一个表创建脚本,我已经把它放在了 /tmp/try.sql 中。我在 OSX 10.10.2 下运行 postgres。

这是表:

cow_dev=# \d carc
                                Table "public.carc"
    Column     |     Type     |                         Modifiers
---------------+--------------+---------------------------------------------------   ---------
 internal_id   | integer      | not null default nextval('carc_internal_id_seq'::regclass)
 acct_nbr      | character(6) |
 birth_date    | date         |
 anm_key       | integer      |
 slghtr_dt     | date         |
 sire_assoc_id | integer      |
 sire_reg      | text         |
 dam_assoc_id  | integer      |
 dam_reg       | text         |
 sex           | text         |
 carc_kphf_pct | real         |
 carc_wt       | integer      |
 marbling      | integer      |
 ribeye_area   | real         | …
Run Code Online (Sandbox Code Playgroud)

postgresql

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