标签: postgresql

如何配置 PostgreSQL Hotstandby 自动故障转移

我已将两台 PostgreSQL 服务器配置为通过流式传输进行热备用。

我如何配置它以便当主服务器宕机时,从服务器将自动成为新的主服务器?

postgresql replication failover

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

将 Postgres 数据库从独立的本地数据库移动到 Amazon RDS

我有一个在我的 Mac 上本地运行的 Ruby on Rails 4 应用程序。我在本地运行 Postgres。

我想将数据库(并且只是数据库,而不是整个应用程序)移动到 Amazon RDS Postgres。

在新数据库上设置所有表并将数据迁移到其中的最简单方法是什么?

postgresql

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

索引大文本的最佳散列技术

幸运的是当我尝试在大长度文本列上创建唯一索引时,Erwin Brandstetter救了我

插入率的上限是每年数百亿行。

对于我的实现,散列永远不需要离开数据库,但散列数据必须经常与外部数据进行比较才能存在。

根据我针对这些目的进行优化的有限经验,我假设散列的最佳数据类型是bytea. 替代方案当然是更长的十六进制字符串。

bytea这些哈希的最佳数据类型是否正确?

如果bytea不是最优的,什么是最优的?

我的意图应该如何实现?

澄清

我根据 Erwin Brandstetter 的建议使用文本的哈希值,以确保大文本是唯一的。我有限的理解是,原始二进制数据总是性能最好的,尤其是与字符串相比时。

只需比较哈希是否存在即可抢占唯一性违规,因此哈希很高兴永远不需要离开数据库。由于 libpqxx 令人难以置信的设计,看起来好像数据可以简单地通过准备好的语句输入并使用(decode(md5($1::text), 'hex')). 当我更熟悉bytea通过 libpqxx 3.1 插入时,我会将其移至 C++。

对于此实现,冲突是可以接受的,因为可以在不破坏系统的情况下重建数据以符合要求。

如果愉快地达到最大吞吐量,那么应该预期经济资源将可用于容纳它;因此,主要关注点始终是性能,所以如果我对 Postgres 的功能及其分区表处理这些行数的能力的理解是准确的,那么它有望在很长一段时间内成为该工作的正确工具。幸运的是,超过几秒钟的数据永远不会改变,我的理解是 Postgres 分区表可以将这些数据制成碎肉。如果没有,这将是那些好问题之一。

postgresql index optimization bytea

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

将嵌套结果提取为 JSON PostgreSQL 9.2

考虑下表

Device
--------
id
name
type
--------

components
--------
id INT
type VARCHAR
--------

Manufacturers
-------------
id INT
name VARCHAR
country VARCHAR
-------------

Device_components
-----------------
deviceid REFERENCES Devices(id)
componentid REFERENCES Components(id)
-----------------

Component_Manufacturers
-----------------------
componentid REFERENCES Components(id)
manufacturerid REFERENCES Manufacturers(id)
-----------------------
Run Code Online (Sandbox Code Playgroud)

我想查询数据库以返回如下内容:

{
 "id": 1,
  "name": "phone",
  "components": [
    {
      "id": 1,
      "type": "screen",
      "manufacturers": [
       {
         "id": 1,
          "name": "a",
          "country": "Germany"
        }
      ]
   },
   {
     "id": 2,
      "type": "keyboard",
      "manufacturers": [
        {
         "id": 1,
          "name": "a",
          "country": "UK" …
Run Code Online (Sandbox Code Playgroud)

postgresql json

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

RDS 上非常慢的简单 PostgreSQL 查询

我似乎在中型 RDS 盒子(db.m3.medium,3.7gb ram)上的查询速度很慢。

这是一个包含 4,152,928 行的表格。

select sum(some_field) c
from pages
where pages.some_id=123
and pages.first_action_at > '2014-01-01 00:00:00 +1000'
Run Code Online (Sandbox Code Playgroud)

总运行时间:45031 毫秒。
在本地,我有大约 110 万行,同样的查询需要大约 450 毫秒。

这是查询计划,来自解释:

Aggregate  (cost=475640.59..475640.60 rows=1 width=4)
   ->  Seq Scan on pages  (cost=0.00..475266.07 rows=149809 width=4)
         Filter: ((first_action_at > '2014-01-01 00:00:00'::timestamp without time zone) 
                AND (some_id = 447))
Run Code Online (Sandbox Code Playgroud)

这是来自解释分析的回应:

 Aggregate  (cost=475641.74..475641.76 rows=1 width=4) (actual time=42419.717..42419.718 rows=1 loops=1)
   ->  Seq Scan on pages  (cost=0.00..475267.22 rows=149810 width=4) (actual time=0.013..42265.908 rows=141559 loops=1)
    Filter: ((first_action_at > '2014-01-01 00:00:00'::timestamp without time …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index index-tuning postgresql-performance

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

调查 Postgres 中的回滚

Postgres 监控脚本check_postgres.pl警告我数据库服务器上正在发生大量回滚。如何调查正在回滚的查询?我曾尝试搜索 Postgres 日志文件,但它不包含任何“回滚”一词的实例,而且我在 Postgres 手册中看不到任何有关启用回滚日志记录的内容。

postgresql rollback postgresql-9.3

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

如何记录由 pl/pgsql 函数执行的 DML 语句?

我有一个 pl/pgsql 函数(见下文),它列出了一些字段并使用动态构造的 UPDATE 命令清除它们的内容。

当我设置时log_statement = 'mod',我在执行函数时在日志上看不到任何内容SELECT fnct_clear_temp_fields();。当我设置log_statement = 'all'并执行我可以SELECT fnct_clear_temp_fields();在日志中看到的函数时,但看不到底层的 UPDATE 命令。

有没有办法让 UPDATE 命令也出现在日志中?

有关信息,这里是功能:

CREATE OR REPLACE FUNCTION fnct_clear_temp_fields() RETURNS VOID AS $$
DECLARE
    --Put into a cursor a view dynamically listing all user-defined fields beginning with 'temp_'
    dataset_1 CURSOR FOR 
        SELECT 
            column_name,
            table_name
        FROM information_schema.tables 
        NATURAL JOIN information_schema.columns 
        WHERE 
            table_schema='public'
            AND table_type='BASE TABLE'
            AND column_name ~ '^temp_'
        ORDER BY table_name,column_name;

    --Record variable to go through each line …
Run Code Online (Sandbox Code Playgroud)

postgresql dml plpgsql functions log

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

如何在 postgres 中优化窗口查询

我有下表,大约有 175k 条记录:

    Column     |            Type             |              Modifiers
----------------+-----------------------------+-------------------------------------
 id             | uuid                        | not null default uuid_generate_v4()
 competition_id | uuid                        | not null
 user_id        | uuid                        | not null
 first_name     | character varying(255)      | not null
 last_name      | character varying(255)      | not null
 image          | character varying(255)      |
 country        | character varying(255)      |
 slug           | character varying(255)      | not null
 total_votes    | integer                     | not null default 0
 created_at     | timestamp without time zone |
 updated_at     | timestamp without time …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index-tuning window-functions rank query-performance

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

PGAdmin III 服务器状态错误:无法读取目录“pg_log”没有这样的文件或目录

在 Ubuntu 14.04 上运行 PostgreSQL 9.3,在 Windows 7 上运行 pgAdmin III 1.18.1。

我尝试过Tools->Server Status,但出现错误:

“无法读取目录“pg_log”没有这样的文件或目录”

我在网上没有看到任何答案。服务器主要设置为默认设置(用于日志记录)。我通过 pgAdmin 连接的用户是超级用户级别的帐户。

使用目的:监控将成为实时系统的内容。

postgresql pgadmin postgresql-9.3

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

如何计算Postgres中行之间的累积差异?

我需要根据 session_id 计算 Postgres 中前一天累积值的差异。示例如下:

CREATE TEMP TABLE foo AS
SELECT date::date, session_id, upload_usage, download_usage, total_usage_on_a_day
FROM ( VALUES
  ( '10/21/2014', '0007994b', 37578561   , 6800209   , 44378770 ),
  ( '10/22/2014', '0007994b', 218113296  , 85272007  , 303385303 ),
  ( '10/23/2014', '0007994b', 552228616  , 252390680 , 804619296 ) ,
  ( '10/24/2014', '0007994b', 799772020  , 391196041 , 1190968061 ),
  ( '10/25/2014', '0007994b', 1047233978 , 529908804 , 1577142782 ),
  ( '10/26/2014', '0007994b', 1294608258 , 668515778 , 1963124036 ),
  ( '10/27/2014', '0007994b', 1066656794 , 557318645 …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3

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