标签: postgresql

postgres 查询性能:视图与函数

我有一个场景,我需要运行工资报告。该报告计算特定日期范围内按员工分组的工资金额。

例如,当运行 2016-11-01 到 2016-11-30 的报告时,我会看到以下结果:

Staff Id    Total
------------------
1           123.00
2           439.22
Run Code Online (Sandbox Code Playgroud)

我对上述报告使用以下查询:

select 
    user_id as staff_id,
    sum(amount) as total
from transaction
where
    business_id = <business_id> and
    type = 'staff' and
    kind = 'commission' and
    created_at between <start_date> and <end_date>
group by
    user_id;
Run Code Online (Sandbox Code Playgroud)

我正在尝试根据以下要求确定优化此查询性能的最佳方法:

  • 结果将根据business_idstart_dateend_date
  • 数据应该始终是新鲜的

看来视图和函数都可以完成这项工作,但我并不能 100% 确定哪种方法是考虑到需求的最佳方法。

旁注:如果能够根据上面提到的参数来缓存数据就太好了,但是数据库方面似乎没有很好的解决方案。如我错了请纠正我!

附加信息:

  • 我正在运行 Postgres 9.6
  • 我在表中的business_idtypekind和列上有索引。这些都是单列、btree 索引。user_idcreated_attransaction

postgresql performance postgresql-performance

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

postgresql:如何禁用表的所有索引

我的表上有 100 多个索引。我想临时禁用所有索引,并希望在索引完成后重新启用它们。

键入每个索引名称来禁用它是不可行的。是否有任何 PostgreSQL 语句可以临时禁用所有索引,然后再次重新启用它们。

问候,

postgresql

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

如何将“COPY”命令与 JDBC 结合使用

所以我一直在使用 postgre 数据库,我注意到当我尝试读取 csv 文件并远程复制到表时,它有时会抛出错误。当我使用缓冲阅读器时它工作得很好,但我试图看看是否有办法让我使用数据库 COPY FROM 方法来工作。它在数据库所在的计算机上运行良好,但我的另一台计算机出现错误。

这一行出现错误:

st.execute("COPY inputdata FROM 'C:\\Users\\JAMES\\Downloads\\V24_Mike_110217_RemovedReturnTrips\\RyderCombiner\\AllNonMatchingWithColNames.csv' CSV HEADER DELIMITER ',';");
Run Code Online (Sandbox Code Playgroud)

这是我连接到数据库的地方:

Class.forName("org.postgresql.Driver");
Connection conn = DriverManager.getConnection("jdbc:postgresql://192.168.1.15:5432/postgres", "postgres", "pass");
Run Code Online (Sandbox Code Playgroud)

我在网上读到也许 STDIN 可以帮助我,但我无法让它工作,并且大多数在线示例都使用 pqsl。有没有办法让它工作或者我需要返回缓冲读者?

更新

因此,我尝试使用 CopyManager API,但在尝试使用 DBUtil 建立连接时出现错误,因为即使我从以下网站下载了 jar 文件,它也无法识别:http ://commons.apache.org/proper/ commons-dbutils/download_dbutils.cgi

代码:

    Connection connection = DBUtil.getConnection("POSTGRES");
    String sql = "COPY inputdata FROM 'C:\\Users\\JAMES\\Downloads\\V24_Mike_110217_RemovedReturnTrips\\RyderCombiner\\AllNonMatchingWithColNames.csv' CSV HEADER DELIMITER ','";
    CopyManager copyManager = new CopyManager((BaseConnection)connection); 
    copyManager.copyIn(sql);
Run Code Online (Sandbox Code Playgroud)

我在 DBUtil 的第一行收到错误...导入 jar 文件是使 jdbc 识别此变​​量的唯一方法吗?

更新2

再次感谢大家,我最终通过遵循给定的链接和一些调整使复制工作正常。

public static void readInputData(String inputDataFile, Statement st) …
Run Code Online (Sandbox Code Playgroud)

postgresql jdbc copy

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

为什么 pg_hba.conf 有时会添加随机规则?(postgresql)

我在 Linux 机器上设置了 postgres 10.4,有时在 pg_hba.conf 顶部会随机出现一些规则,只允许用户“pgdbadm”进行 MD5 连接。我不确定数据库是否被黑,但在更改密码并检查 pgdbadm 不存在后,我仍然不时看到新规则。数据库是否有可能被泄露?

如果我没记错的话,这三个规则如下:

local all all 0.0.0.0/0 reject
host all postgres 0.0.0.0/0 reject
host all pgdbadm 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

任何关于正在发生的事情的解释以及潜在的解决方案将不胜感激。

编辑:我发现在设置 pg_hba.conf 时我使用了一个规则,所有连接都不需要密码。这可能允许机器人登录并创建不需要的数据库/其他东西,所以我将全新安装 Ubuntu 并备份数据库。

postgresql

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

如何在 postgresql 中获取主机名?

有什么方法可以在 postgresql 中获取主机名/服务器名,例如 SQL Server 中的 @@ServerName?

postgresql

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

postgres; 索引会自动重新索引新数据吗?

如果我在 Postgres 表中有一堆行,然后创建一个索引,如果在创建后插入新数据行,索引是否会自动更新?

或者说,REINDEX 是仅在一些罕见的情况下需要,还是在添加新数据时才需要?

postgresql performance postgresql-performance

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

100k DDL 语句上的 Postgres 事务 OOM

我们在 PostgreSQL 的单个事务中执行大约 100k DDL 语句。在执行过程中,各个 Postgres 连接的内存使用量逐渐增加,一旦它无法获得更多内存(在 3GB 内存上从 10MB 使用量增加到 2.2GB),OOM 杀手用 9 命中它,导致 Postgres 进入恢复模式.

BEGIN;

CREATE SCHEMA schema_1;
-- create table stmts - 714
-- alter table add pkey stmts - 714
-- alter table add constraint fkey stmts - 34
-- alter table add unique constraint stmts - 2
-- alter table alter column set default stmts - 9161
-- alter table alter column set not null stmts - 2405
-- alter table add check …
Run Code Online (Sandbox Code Playgroud)

postgresql performance transaction ddl postgresql-9.6 postgresql-performance

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

Amazon RDS Postgresql 中的 apgcc 架构是什么?

最近apgcc,在我们测试的 Aurora Postgresql 集群(欧盟西部地区)的每个数据库中都出现了一个名为的神秘新模式。它归rdsadmin帐户所有。它是什么,它来自哪里?

pgadmin 中的架构

我知道东京地区apgcc发布公告中提到了。Twitter透露,这也发生在其他人身上

postgresql aurora amazon-rds

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

在postgresql函数中循环jsonb对象的键/值对

我正在尝试在 Postgres 中创建一个函数,该函数可以遍历给定jsonb对象中的每个键/值对。

create or replace function myFunction
(input jsonb)
returns jsonb as $$
BEGIN

    // foreach(key in input)
    //       do some math operation on its corresponding value

    returns input;

END; $$
Run Code Online (Sandbox Code Playgroud)

参数输入应为 jsonb 对象,例如{"a":1, "b":2, "c":3}.

我想遍历对象中的每个键/值对。从我的评论中可以看出,我曾经使用更通用的编程语言(如 c、java 等)编写后端代码。所以我不擅长 SQL。我曾尝试在线搜索,但他们谈论如何遍历jsonb数组而不是对象。所以真的卡在这里了。

postgresql plpgsql json

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

在 postgreSQL-10 中创建存储过程时出错

我无法让我的第一个存储过程工作,所以我从手册中复制了这个例子:

CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;

CALL insert_data(1, 2);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

ERROR:  syntax error at or near "PROCEDURE"
LINE 1: CREATE PROCEDURE insert_data(a integer, b integer)
               ^
SQL state: 42601
Character: 8
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我在本地主机上运行数据库,以管理员用户身份运行。我自己安装的。安装过程无错误完成,我能够创建表、函数、触发器等。

postgresql stored-procedures errors postgresql-10

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