我正在尝试按照 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)
但我收到以下错误:
Run Code Online (Sandbox Code Playgroud)Error: "st_extent" is an aggregate function
为什么它不喜欢聚合函数?我该怎么做才能解决这个问题?
我的机器上安装了 PostgreSQL 9.5 版(Windows 7 Enterprise x64 位版本)。我在模式“public”中有几个数据库。我想使用 LAN 连接从另一台机器(Windows 7)使用/访问这些数据库中的一个(以便该数据库可以作为两台机器之间的共享数据库)。我想知道是否可以通过 postgresql.conf 对话窗口中的“listen_addresses”选项来完成?如果没有,有没有其他方法可以做到这一点?
我有大约 50 个 postgres 数据库。我需要用他们各自的数据库名称检查所有用户。我知道\du给出了所有用户喜欢的列表,
List of roles
Role name | Attributes | Member of
----------------------------------+-----------------------------------+----------------------
foo Superuser {}
..
..
Run Code Online (Sandbox Code Playgroud)
它不显示数据库名称。我可以手动登录到每个数据库并运行\du以查看该数据库中存在的用户列表,但这会花费很多时间。那么是否有单行命令或简单的解决方法可以显示用户列表及其各自的数据库名称?
我得到了要在 ( 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) 我有一个这样的简化表:
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) 我正在使用 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) 我已经阅读了相同架构/查询的 MySQL 和 PostgreSQL 之间的性能差异。. 它是否仍然与固态硬盘的外观有关?
那篇文章说 Postgres 更适合复杂查询和子查询,而对于通过 id 和顺序扫描进行的简单查询则更差。
对于某些查询,Postgres 更糟糕/更慢,因为每个表都是一个堆,意味着没有聚集索引,意味着行没有按主键在硬盘驱动器上物理排序。因此,如果您想从 Postgres 读取大部分记录(根据我的理解,通过 id) - 如果与 MySQL 相比,这将导致许多随机 I/O 和更差的性能。
问题:
Plan A和 Postgres 使用Plan B,对吗? Plan A表示聚集索引,对吗?该表按 物理排序lastName + firstName。Plan A在 HDD 上的性能可能比Plan B在 SSD 上更好,因此 Postgres + SSD 不是灵丹妙药。查询聚集索引需要选择MySQL,对吗?any call …mysql rdbms postgresql performance query-performance postgresql-performance
根据对这个问题的回答,我设法产生了以下输出以获得运行的值总和:
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 上运行)并获得一个与下面非常相似的表。(相反,我想知道我正在尝试的是 …
我正在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在函数中附加命令?
我在 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
postgresql ×10
performance ×2
aggregate ×1
amazon-rds ×1
backup ×1
copy ×1
dynamic-sql ×1
functions ×1
index-tuning ×1
migration ×1
mysql ×1
pg-dump ×1
pg-hba.conf ×1
pg-restore ×1
plpgsql ×1
rdbms ×1
remote ×1
trigger ×1
update ×1
users ×1