标签: postgresql

在 postgres 中,可以跨分区优化表吗?

在具有许多公司的数据库中,使用schemasearch_path

几乎所有访问都来自公司级别,即仅限于单个模式。一些数据仓库和会计功能需要扫描所有模式。

对于这个问题,根据@horse_with_no_name 的最佳建议,使用模式本身作为分区。例如

create table global.usr(
    usr_id int primary key,  // these will be unique across all partitions
    name varchar );

create table cmp1.usr(
    usr_id int primary key,
) inherits( global.usr );

create table cmp2.usr( 
    ....
Run Code Online (Sandbox Code Playgroud)

如果我们填充

insert into cmp1 usr values( 11, 'eleven' );
insert into cmp1 usr values( 12, 'twelve' );

insert into cmp2 usr values( 21, 'twenty-one' );
insert into cmp2 usr values( 22, 'twenty-two' );

insert into cmp3 usr values( 31, 'thirty-one' …
Run Code Online (Sandbox Code Playgroud)

postgresql

6
推荐指数
1
解决办法
503
查看次数

PostgreSQL 流复制损坏:无效幻数,乱序时间线 ID

出于某种原因,我的 PostgreSQL 从站不再流式复制主站上的更改。之前可以用,有段时间了,最​​近发现slave的数据库内容很旧,slave的日志文件有错误,分别是“无效幻数0000 ”和“乱序时间线ID 1(之后2) ”。

你知道我该如何解决这个问题吗?或者为什么会发生?

详情如下。

日志文件错误消息:(在从站上,pg_log/postgresql-Sat.log)

LOG:  entering standby mode
LOG:  redo starts at 0/1C78848
LOG:  consistent recovery state reached at 0/1C7FA30
LOG:  database system is ready to accept read only connections
LOG:  invalid magic number 0000 in log file 0, segment 1, offset 14942208
LOG:  streaming replication successfully connected to primary
LOG:  out-of-sequence timeline ID 1 (after 2) in log file 0, segment 1, offset 0
FATAL:  terminating walreceiver process due to administrator …
Run Code Online (Sandbox Code Playgroud)

postgresql replication

6
推荐指数
1
解决办法
4459
查看次数

PostgreSQL下加速IN查询的方法

我有以下形式的查询:

SELECT * FROM twitter_personas WHERE twitter_user_id IN ($1, $2, $3, ..., $25000)
Run Code Online (Sandbox Code Playgroud)

IN 查询有 10 到 25000 个值。查询一次运行几分钟。我有近 500,000 个这样的查询要运行。

twitter_user_id 列已编入索引。关于如何加快速度的任何想法?

# \d twitter_personas
                                    Table "public.twitter_personas"
      Column      |          Type          |                         Modifiers                          
------------------+------------------------+------------------------------------------------------------
 persona_id       | uuid                   | not null
 twitter_user_id  | bigint                 | 
 screen_name      | character varying(40)  | not null
 avatar_url       | text                   | 
 hashval          | integer                | not null default nextval('personas_hashval_seq'::regclass)
Indexes:
    "twitter_personas_pkey" PRIMARY KEY, btree (persona_id)
    "index_twitter_personas_on_screen_name" UNIQUE, btree (screen_name)
    "index_twitter_personas_on_screen_name_persona_id" btree (screen_name, persona_id)
    "index_twitter_personas_twitter_user_id" btree (twitter_user_id) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance

6
推荐指数
1
解决办法
4806
查看次数

表空间是否类似于逻辑卷?

我对 PostgreSQL 中的表空间感到困惑。是不是类似于 LVM?我的意思是当磁盘已满时,我们可以添加另一个磁盘,然后格式化CREATE TABLESPACE tblspace LOCATION /media/disk2/data吗?够了吗?或者我们应该手动使用ALTER数据库、表或索引来利用它?

postgresql tablespaces

6
推荐指数
1
解决办法
4013
查看次数

用于 EAV 结构存储的 PostgreSQL 与 MySQL

使用 Postgres 9.x 与 MySQL 5.x 存储EAV(实体-属性-值)结构有什么实际区别,或者有什么优势,尤其是在读取性能方面?

postgresql mysql-5 performance database-design eav

6
推荐指数
1
解决办法
1906
查看次数

PostgreSQL:无法运行 repmgr 克隆的数据库

我正在使用 PostgreSQL 热备份运行测试,有 1 个主站,正好有 1 个从站。

我正在使用本指南中的说明:http : //www.howtoforge.com/how-to-set-up-a-postgresql-9.0-hot-standby-streaming-replication-server-with-repmgr-on-opensuse -11.4

我使用的是 PostgreSQL 9.1 版、repmgr 1.1.0 和 Ubuntu 10.04 LTS。

我按照我跑的指南中的步骤进行了步骤 6

repmgr -D /var/lib/postgresql/9.1/main -d pgbench -p 5432 -R postgres --verbose standby clone pgmaster
Run Code Online (Sandbox Code Playgroud)

在 pgslave 上。

然后我做了一个

/etc/init.d/postgresql start
Run Code Online (Sandbox Code Playgroud)

在它上面,脚本(似乎)成功完成。
但是,执行 psql 会引发错误:

psql: FATAL: 数据库系统正在启动

欢迎任何有关进一步进行的帮助。

postgresql replication repmgr

6
推荐指数
1
解决办法
5978
查看次数

如何连接到远程 PostgreSQL 服务器

我使用 java + spring + PostgreSQL 编写了一个 Web 应用程序,我已经启动并运行了它。

我的系统有一个测试员,我希望他能够直接连接到我的数据库以检查与应用程序交互的结果。与往常一样,网络上充斥着关于如何连接的文章,但他们没有提到的一件简单的事情是客户端是否应该安装一些应用程序来连接到数据库?我对为数据库进行正确设置有所了解,但是如果一个凡人在他们的 Windows 控制台中输入以下内容:

psql -h <host> -p <port> -u <database>
Run Code Online (Sandbox Code Playgroud)

他们会得到'psql'不是内部或外部命令,也不是可运行的程序或批处理文件。我知道我没有收到那个错误,因为我通过 shell 操作并且我的主路径设置为 psql.exe,但是客户端再次不需要安装 PostgreSQL 来访问远程 PostgreSQL 数据库。它只是不会在我的脑海中响起。

客户端如何在不安装任何东西的情况下通过命令提示符连接到数据库?

postgresql remote

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

将大量数据导入 PostgreSQL 数据库

我正在将大量数据导入 PostgreSQL 服务器(跨服务器上的多个数据库)。

当我上次尝试导入数据时,它有效地“崩溃”了我的机器(Ubuntu 10.0.4),因为 /var/log/postgres 包含超过360G的文件(而我只进行了大约 1 个导入的一半)。

我不确定日志文件的用途(我猜它必须是为了符合 ACID 等)。但是我想知道是否有办法减少导入大量数据时生成的日志文件的大小。

postgresql import

6
推荐指数
1
解决办法
3285
查看次数

时间线和历史文件 PostgreSQL 9.1

时间线、历史文件和 'recovery_target_timeline' 中的设置的目的是什么recovery.conf

我从 PostgreSQL 9.1 文档中得到的模糊理解是,当从服务器完成恢复时,它会切换到新的时间线,以防止覆盖先前时间线的 WAL。

我不清楚这是如何在恢复场景中使用的,以及 .history 文件和“recovery_target_timeline”设置为“最新”的目的。

postgresql

6
推荐指数
1
解决办法
1947
查看次数

PostgreSQL 树结构和递归 CTE 优化

我试图在 PostgreSQL (8.4) 中表示树结构,以便能够查询从根到给定节点的路径或查找子分支中的所有节点。

下面是一个测试表:

CREATE TABLE tree_data_1 (
    forest_id TEXT NOT NULL,
    node_id TEXT NOT NULL,
    parent_id TEXT,
    node_type TEXT,
    description TEXT,
    PRIMARY KEY (forest_id, node_id),
    FOREIGN KEY (forest_id, parent_id) REFERENCES tree_data_1 (forest_id, node_id)
);
CREATE INDEX tree_data_1_forestid_parent_idx ON tree_data_1(forest_id, parent_id);
CREATE INDEX tree_data_1_forestid_idx ON tree_data_1(forest_id);
CREATE INDEX tree_data_1_nodeid_idx ON tree_data_1(node_id);
CREATE INDEX tree_data_1_parent_idx ON tree_data_1(parent_id);
Run Code Online (Sandbox Code Playgroud)

每个节点由(forest_id, node_id)(在另一个林中可以有另一个具有相同名称的节点)标识。每棵树都从一个根节点(其中parent_id为空)开始,尽管我只希望每个森林都有一个。

这是使用递归 CTE 的视图:

CREATE OR REPLACE VIEW tree_view_1 AS
    WITH RECURSIVE rec_sub_tree(forest_id, node_id, parent_id, depth, path, cycle) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance tree optimization cte

6
推荐指数
1
解决办法
5641
查看次数