标签: postgresql

优化对两个大表的查询

我的系统中有一个非常重要的查询,由于表上的数据量很大,执行时间太长。我是一名初级 DBA,我需要为此进行最佳优化。每个表大约有 8000 万行。

表是:

tb_pd

   Column            |  Type   | Modifiers | Storage | Stats target | Description 
---------------------+---------+-----------+---------+--------------+-------------
 pd_id               | integer | not null  | plain   |              | 
 st_id               | integer |           | plain   |              | 
 status_id           | integer |           | plain   |              | 
 next_execution_date | bigint  |           | plain   |              | 
 priority            | integer |           | plain   |              | 
 is_active           | integer |           | plain   |              | 
Indexes:
    "pk_pd" PRIMARY KEY, btree (pd_id)
    "idx_pd_order" btree (priority, next_execution_date) …
Run Code Online (Sandbox Code Playgroud)

postgresql optimization index-tuning query-performance

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

理解 psql 提示

postgres=#和 和有postgres-#什么区别?我尝试使用谷歌搜索并查看官方网站,但无法找到符号。

postgresql psql

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

从视图或函数中的多个表中提取数据

我需要从 3 个表中提取数据,并以特定方式打印它。

http://sqlfiddle.com/#!15/59481/8

请参阅此问题以了解查询是如何生成的。小提琴中的版本部分工作,但我需要修改查询以产生不同的输出。

我有一个project_report存储数据的表keyword

1. If a keyword has data for a particular day it will store it in `project_report`
2. A keyword might have no data to store for a particular day.
3. A keyword might store multiple rows of data for a particular day (the data is uniq)
4. A keyword might not have data for a particular day, but it might have for a different day.
Run Code Online (Sandbox Code Playgroud)

我相信要解决我的问题,DB 函数将是最好的方法,因为我希望能够指定一个日期并从project_reports …

postgresql performance pivot query-performance

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

如何将参数传递给函数

目前我创建了一个视图,请在答案中查看。如何根据该crosstab()查询创建函数,以便传递日期并获取特定日期的数据?

多次调用该函数并传递不同的日期来填充图表(例如)也是一种好习惯吗?

postgresql view functions

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

PostgreSQL:更新视图的触发器不起作用

我正在尝试使更新视图的触发器起作用。如果我正在做并插入它就可以了!但是当我尝试进行 UPDATE 时,它只是不运行。

CREATE OR REPLACE FUNCTION test_trigger_function()
RETURNS trigger AS
$$
    BEGIN
        RAISE NOTICE 'hi';
        RETURN NEW;
    END;
$$ LANGUAGE PLPGSQL;

CREATE TRIGGER test_trigger
INSTEAD OF INSERT OR UPDATE
    ON specific_view
        FOR EACH ROW
            EXECUTE PROCEDURE test_trigger_function();
Run Code Online (Sandbox Code Playgroud)

然后在另一个地方我执行它:

RAISE NOTICE 'before';
UPDATE specific_view SET gender='randomstuff';
RAISE NOTICE 'after';
Run Code Online (Sandbox Code Playgroud)

结果:

psql:test_function.pgsql:134: NOTICE:  before
psql:test_function.pgsql:134: NOTICE:  after
Run Code Online (Sandbox Code Playgroud)

插入时:

RAISE NOTICE 'before';
INSERT INTO specific_view (gender)
    VALUES ('randomstuff');
RAISE NOTICE 'after';
Run Code Online (Sandbox Code Playgroud)

返回:

psql:test_function.pgsql:134: NOTICE:  before
psql:test_function.pgsql:134: NOTICE:  hi
CONTEXT:  SQL statement "INSERT …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger postgresql-9.3

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

将 postgres 时间戳限制为“一天结束”?

考虑到一个指定的表bananas
一个timestamp without time zone名为列end_time
一些 psql客户有set timezone to 'UTC'
其他 psql客户端有set timezone to 'US/Eastern'
服务器配置有timezone = 'UTC'postgresql.conf

如何编写支票约束bananas.end_time以确保end_time始终是一天的结束,定义为“美国/东部”一天的第 23 小时 59 分 59 秒?

我试过:

alter table bananas
add constraint ck_end_time_is_end_of_day
check (
  23 = date_part('hour', end_time at time zone 'UTC' at time zone 'US/Eastern')
  and 59 = date_part('minute', end_time at time zone 'UTC' at time zone …
Run Code Online (Sandbox Code Playgroud)

postgresql constraint datatypes timestamp timezone

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

另一个模式中的序列权限

Postgres 9.3 Debian 7.0

我为特定用户创建了特定模式,并在此模式中为该用户创建了一个视图,因此这是他知道存在的唯一表。问题是这个用户需要使用这个表的主键的序列,但它说“错误:序列的权限被拒绝”

原始表及其序列属于模式 A。此用户的模式 B 具有此表 T 的可插入视图。我不能为该用户授予模式 A 的使用权,否则他将能够看到所有的名称和定义我的桌子。

问题是:有没有办法为这个序列创建某种视图,以便他可以调用 nextval() 和 currval()?目标是使该序列可用于该受限用户,而无需让他访问该序列实际所属的主模式。

schema postgresql permissions sequence postgresql-9.3

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

如何触发日志消息中的换行符?

日志消息是否可以跨越多行?我期待:

RAISE WARNING 'Line 1\nLine 2';

导致以下日志:

Line 1
Line 2
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

Line 1\nLine 2

有任何想法吗?

postgresql plpgsql

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

PostgeSQL 的代理身份验证

以下似乎可能是一种相当普遍的情况,但我还没有看到任何解决方案。

我有一个 PostgreSQL 数据库,其中包含特定于 的视图,$user以便根据某些特定于数据库的 ACL 逻辑来限制数据。数据库通常通过 JDBC 访问,特别是在 Web 界面的 JSP 中。用户通过 LDAP 密码认证登录网站。

我想要的是利用从 JDBC 连接到数据库的视图。但通常这个中间层连接是使用通用用户创建的,而不是特定于登录网站的人。我相信在 Oracle 中“正确”的方法是Proxy Authentication,但 AFAIAA 没有与 PostgreSQL 等效的方法。那么该怎么做呢?

想到了一些想法:

  • 给所有用户的数据库帐户设置相同的密码,然后使用这个通用密码创建特定于用户的 JDBC 连接(这感觉太不对了……)
  • 将用户的登录密码存储在网站某处,在创建数据库连接时重复使用(再次,这个感觉很错误)

还有其他(希望更好)的建议吗?

postgresql authentication jdbc connections

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

Postgres autovacuum 何时执行

我使用的是较旧版本的 Postgres (8.4.20)。我知道 autovacuum 进程经常执行以释放删除或更新表中数据的查询的磁盘空间。我有一个不经常删除或更新的数据库。

在这样的数据库上处理 autovacuum 需要更少的时间和内存,还是仅取决于数据库中对象的大小和数量?

postgresql vacuum postgresql-8.4 autovacuum

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