标签: postgresql

Postgres - 仅尝试备份函数

我正在尝试按照 Craig Ringer 对这个问题的回答:https :
//stackoverflow.com/questions/13758003/how-to-take-backup-of-functions-only-in-postgres

我的命令是:

psql -U username -AT db_name -c "
    SELECT pg_get_functiondef(f.oid) 
    FROM pg_catalog.pg_proc f 
    INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid) 
    WHERE n.nspname = 'public'
" > /dump/file/functions.sql
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Error: "st_extent" is an aggregate function
Run Code Online (Sandbox Code Playgroud)

为什么它不喜欢聚合函数?我该怎么做才能解决这个问题?

postgresql backup aggregate functions

5
推荐指数
1
解决办法
2633
查看次数

使用另一台计算机上的 postgres 数据库

我的机器上安装了 PostgreSQL 9.5 版(Windows 7 Enterprise x64 位版本)。我在模式“public”中有几个数据库。我想使用 LAN 连接从另一台机器(Windows 7)使用/访问这些数据库中的一个(以便该数据库可以作为两台机器之间的共享数据库)。我想知道是否可以通过 postgresql.conf 对话窗口中的“listen_addresses”选项来完成?如果没有,有没有其他方法可以做到这一点?

postgresql authentication remote pg-hba.conf postgresql-9.5

5
推荐指数
0
解决办法
2万
查看次数

如何检查所有postgres数据库中存在的用户列表

我有大约 50 个 postgres 数据库。我需要用他们各自的数据库名称检查所有用户。我知道\du给出了所有用户喜欢的列表,

                                    List of roles
            Role name             |            Attributes             |      Member of
----------------------------------+-----------------------------------+----------------------
foo                             Superuser                              {}
..
..
Run Code Online (Sandbox Code Playgroud)

它不显示数据库名称。我可以手动登录到每个数据库并运行\du以查看该数据库中存在的用户列表,但这会花费很多时间。那么是否有单行命令或简单的解决方法可以显示用户列表及其各自的数据库名称?

postgresql users

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

分配具有动态列名的列

我得到了要在 ( BEFORE UPDATE) 触发器中设置的列的名称,我想将其设置为该OLD值并忽略传入的任何内容。我尝试了以下操作:

CREATE OR REPLACE FUNCTION prevent_column_update() RETURNS TRIGGER AS $$
  DECLARE
    col TEXT := TG_ARGV[0];
  BEGIN
    EXECUTE format('SELECT ($1).%I INTO ($2).%I', col, col) USING OLD, NEW;
    RETURN NEW;
  END;
  $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

并使用如下:

CREATE TRIGGER request_protect_date_price_value
  BEFORE UPDATE OF date_price ON requests
  FOR EACH ROW EXECUTE PROCEDURE prevent_column_update('date_price');
Run Code Online (Sandbox Code Playgroud)

但是当更新它失败时:

ERROR:  syntax error at or near "("
LINE 1: SELECT ($1).date_price INTO ($2).date_price
                                    ^
QUERY:  SELECT ($1).date_price INTO ($2).date_price
Run Code Online (Sandbox Code Playgroud)

postgresql trigger dynamic-sql plpgsql postgresql-9.5

5
推荐指数
1
解决办法
6392
查看次数

选择符合条件的最后一条记录

我有一个这样的简化表:

id |val |
---|----|
1  |6   |
2  |5   |
3  |4   |
4  |4   |
5  |8   |
6  |9   |
7  |7   |
Run Code Online (Sandbox Code Playgroud)

我想以选择val < 5最后一条记录的方式选择记录val >= 5。所以结果应该是这样的:

id |val |
---|----|
1  |6   |
2  |5   |
3  |5   |
4  |5   |
5  |8   |
6  |9   |
7  |7   |
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以不定义函数,所以我尝试了:

id |val |
---|----|
1  |6   |
2  |5   |
3  |4   |
4  |4   |
5  |8   | …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

Postgresql:将模式从一台服务器复制到另一台服务器时如何避免编码问题?

我正在使用 pg_dump 和 pg_restore 将模式从一个 Postgresql 9.5 服务器移动到另一个。在目标服务器上:

$ pg_dump -h source.example.com -n my_schema -v --no-owner -F c -f my_schema.dump
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
...
pg_dump: saving encoding = UTF8
(dump completes with no other errors or warnings)

$ pg_restore -h 127.0.0.1 -e …
Run Code Online (Sandbox Code Playgroud)

postgresql pg-dump pg-restore

5
推荐指数
1
解决办法
1015
查看次数

SSD 上的 Postgres 堆表性能

我已经阅读了相同架构/查询的 MySQL 和 PostgreSQL 之间的性能差异。. 它是否仍然与固态硬盘的外观有关?

那篇文章说 Postgres 更适合复杂查询和子查询,而对于通过 id 和顺序扫描进行的简单查询则更差。

对于某些查询,Postgres 更糟糕/更慢,因为每个表都是一个堆,意味着没有聚集索引,意味着行没有按主键在硬盘驱动器上物理排序。因此,如果您想从 Postgres 读取大部分记录(根据我的理解,通过 id) - 如果与 MySQL 相比,这将导致许多随机 I/O 和更差的性能。

问题:

  1. 但是SSD呢?Postgres 和 MySQL 的顺序读取性能是否相同?
  2. 在 RDBM 中使用 SSD 而不是 HHD 是否有意义?

更新:与 Rick James 的回答有关

  1. MySQL 使用Plan A和 Postgres 使用Plan B,对吗?
  2. Plan A表示聚集索引,对吗?该表按 物理排序lastName + firstName
  3. Plan A在 HDD 上的性能可能比Plan B在 SSD 上更好,因此 Postgres + SSD 不是灵丹妙药。查询聚集索引需要选择MySQL,对吗?
  4. 请详细了解 I/O 绑定是指哪些查询?在我的理解中any call …

mysql rdbms postgresql performance query-performance postgresql-performance

5
推荐指数
1
解决办法
687
查看次数

特殊累积和基于前一行的行数据转换

根据对这个问题回答,我设法产生了以下输出以获得运行的值总和:

id      creation                    operation       value       running sum
SyJw-c  2016-09-01 00:11:08.307419  positive_op_1   1.33        28.82
SyJw-c  2016-08-21 08:32:54.431662  negative_op_1   -1          27.49
SyJw-c  2016-08-18 07:38:33.878365  positive_op_2   1           28.49
SyJw-c  2016-08-14 18:12:03.599797  negative_op_1   -1          27.49
SyJw-c  2016-08-02 15:44:29.693303  positive_op_1   1.33        28.49
SyJw-c  2016-07-31 12:08:50.659905  override_op_1   4.66        27.16
SyJw-c  2016-06-26 06:53:54.537603  negative_op_1   -3.5        22.5
SyJw-c  2016-05-31 13:34:08.005687  negative_op_1   -1          26
SyJw-c  2016-05-31 13:34:04.776970  negative_op_1   -1          27
SyJw-c  2016-05-31 11:27:09.502983  override_op_2   28          28
Run Code Online (Sandbox Code Playgroud)

我的情况更复杂。我不仅需要对这些值求和,还需要能够首先根据其下方行的运行总和对某些行执行转换。

我先解释一下动机:

目前我有一个带有增量、减量和覆盖操作的表。我想将数据移植到一个只有增量和减量操作的表中,这样我就可以直接总结这些值。我不希望维护旧表,只是一种将数据迁移到更简单模型的方法,因此只将数据附加到新表。

采用上面的“原始”表,我想编写一个查询(我在 postgresql 9.5 上运行)并获得一个与下面非常相似的表。(相反,我想知道我正在尝试的是 …

postgresql migration window-functions

5
推荐指数
1
解决办法
213
查看次数

postgresql 中的复制命令以追加数据

我正在copy从函数执行命令

execute 'copy (select * from tableName) to ''/tmp/result.txt'''
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是,tableName是动态的,将有更多的表(循环迭代)。result.txt只有最后一次迭代(表)数据。

如果必须的话,我可以通过命令行使用\o>>附加到文件中。但是,我必须使用该功能。

我读了http://shuber.io/reading-from-the-filesystem-with-postgres/。它建议使用临时表的解决方案。我可以做类似的事情,但没有临时表吗?(我必须避免归档日志)。创建临时表会创建存档日志吗?

有没有办法copy在函数中附加命令?

postgresql postgresql-9.1 copy

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

提高大表的 UPDATE 性能

我在 Amazon RDS(2vCPU,8 GB RAM)上使用 Postgres 9.5。
我使用 pganalyze 来监控我的表现。
我在数据库中有大约 20 万条记录。

在我的仪表板中,我看到以下查询的平均执行时间为 28 秒和 11 秒:

UPDATE calls SET ... WHERE calls.uuid = ?   telephonist 28035.41    0.01    100%    0.03%

UPDATE calls SET sip_error = ? WHERE calls.uuid = ? telephonist 11629.89    0.44    100%    0.69%
Run Code Online (Sandbox Code Playgroud)

我已经尝试VACUUM、发现并清理了 7,670 个死行。
任何想法如何提高UPDATE性能?这是查询:

UPDATE calls SET X=Y WHERE calls.uuid = 'Z'
Run Code Online (Sandbox Code Playgroud)

如何改进上述查询?我可以添加另一个字段吗?例子:

UPDATE calls SET X=Y WHERE calls.uuid = 'Z' AND calls.campaign = 'W'
Run Code Online (Sandbox Code Playgroud)

该列uuid未编入索引。
https://www.tutorialspoint.com/postgresql/postgresql_indexes.htm建议不建议将索引用于 …

postgresql performance index-tuning update amazon-rds postgresql-performance

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