标签: postgresql

将 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
查看次数

如何在 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 - 使用索引插入性能

我们在 Postgres 9.2.10 数据库中有一个大约有 20 列的表。为了在某​​些SELECT查询上获得更好的性能,我们计划在数据类型为 的列上添加索引timestamp。由于索引也会降低插入的性能,我们做了以下性能测试:

我们在表中插入了 500 万条记录。那是最大值。我们期望在生产中的记录数。然后我们测量了在时间戳列上插入有索引和没有索引的 10000 条记录的时间。这是我们每天预期的最大插入次数,峰值每秒不超过 5 次插入。

结果如下:

  • 带索引 - 84 441 毫秒
  • 无索引 - 78 000 毫秒

至少对于本次测试,该指数仅略微降低了性能。对于我们的要求,我没有看到添加索引的问题。

但这只是实验室环境中的一项测试,在生产数据库上运行时是否还有其他陷阱?我们是否会遇到INSERT在特定情况下突然需要超过 5 秒的情况?

postgresql performance index index-tuning query-performance

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

如何在 Amazon RDS PostgreSQL 上创建 INOUT 分配转换?如果不可能,那为什么?

我正在将现有应用程序迁移到 Amazon RDS PostgreSQL。该应用程序具有跨数据库支持,出于兼容性原因,它包含以下 SQL:

CREATE CAST (varchar AS numeric) WITH INOUT AS ASSIGNMENT
Run Code Online (Sandbox Code Playgroud)

在普通 PostgreSQL 上,这需要超级用户。在 Amazon RDS PostgreSQL 上这失败了

错误:必须是类型字符变化或数字类型的所有者

  • 有没有办法在 Amazon RDS 中创建这样的演员表(也许通过管理 Web 界面)?
  • 如果这是不可能的,那为什么?这是故意限制(例如演员是危险的)还是只是一个缺失的功能?

注意:我猜这是否是赋值或隐式转换无关紧要,但为了完整性而包含此信息。

postgresql cast amazon-rds

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

Postgres 中数组列的内部连接

在 Postgres 9.4 中,我试图提取UNIQUEPostgres 中给定表的约束中涉及的所有列的名称。

看起来此类列的名称包含在pg_constraint. 根据文档,与我的问题相关的列称为conkey,它恰好是一个ints数组。

关键是,我提出的查询给了我错误的结果,我很确定这是因为我conkey以错误的方式加入。查询如下:

SELECT
    pg_attribute.attname,
    pg_constraint.*
FROM
    pg_attribute
INNER JOIN pg_constraint 
        ON pg_attribute.attnum = ANY (pg_constraint.conkey)
WHERE pg_constraint.conrelid = (
    SELECT
        oid
    FROM
        pg_class
    WHERE
        relname LIKE 'test_table'
)
AND pg_constraint.contype = 'u'; -- to filter out non-unique constraints
Run Code Online (Sandbox Code Playgroud)

这是一个用于快速重现的表 DDL:

CREATE TABLE "test_table" (
"date" date DEFAULT now() NOT NULL,
"foo" varchar COLLATE "default" NOT NULL
CONSTRAINT "test_table_foo_key" UNIQUE ("foo")
) …
Run Code Online (Sandbox Code Playgroud)

postgresql join array catalogs

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