在具有许多公司的数据库中,使用schema和search_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 从站不再流式复制主站上的更改。之前可以用,有段时间了,最近发现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) 我有以下形式的查询:
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 中的表空间感到困惑。是不是类似于 LVM?我的意思是当磁盘已满时,我们可以添加另一个磁盘,然后格式化CREATE TABLESPACE tblspace LOCATION /media/disk2/data吗?够了吗?或者我们应该手动使用ALTER数据库、表或索引来利用它?
使用 Postgres 9.x 与 MySQL 5.x 存储EAV(实体-属性-值)结构有什么实际区别,或者有什么优势,尤其是在读取性能方面?
我正在使用 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: 数据库系统正在启动
欢迎任何有关进一步进行的帮助。
我使用 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 服务器(跨服务器上的多个数据库)。
当我上次尝试导入数据时,它有效地“崩溃”了我的机器(Ubuntu 10.0.4),因为 /var/log/postgres 包含超过360G的文件(而我只进行了大约 1 个导入的一半)。
我不确定日志文件的用途(我猜它必须是为了符合 ACID 等)。但是我想知道是否有办法减少导入大量数据时生成的日志文件的大小。
时间线、历史文件和 'recovery_target_timeline' 中的设置的目的是什么recovery.conf?
我从 PostgreSQL 9.1 文档中得到的模糊理解是,当从服务器完成恢复时,它会切换到新的时间线,以防止覆盖先前时间线的 WAL。
我不清楚这是如何在恢复场景中使用的,以及 .history 文件和“recovery_target_timeline”设置为“最新”的目的。
我试图在 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 ×10
performance ×3
replication ×2
cte ×1
eav ×1
import ×1
mysql-5 ×1
optimization ×1
remote ×1
repmgr ×1
tablespaces ×1
tree ×1