主服务器中的设置:
max_wal_senders = 1 wal_level = '存档' 归档模式 = 开 存档命令 = 'cd .' wal_keep_segments = 10000
从服务器中的设置:在 recovery.conf 文件中:
待机模式 = '开' primary_conninfo = 'host=ipaddress of master user=repuser' trigger_file = '/tmp/postgresql.trigger.5432'
log_connections=on 在主服务器和从服务器上都设置
在主服务器的 pg_hba.conf 文件中为复制用户创建条目
主机复制 repuser ipaddress/32 信任
尝试复制时出现以下错误
2014-07-14 19:28:22 IST LOG:数据库系统在 2014-07-14 19:28:21 IST 的恢复中关闭 2014-07-14 19:28:22 IST 日志:进入待机模式 2014-07-14 19:28:22 IST 警告:WAL 是用 wal_level=minimal 生成的,数据可能丢失 2014-07-14 19:28:22 IST 提示:如果您临时设置 wal_level=min imal 而不进行新的基本备份,则会发生这种情况。 2014-07-14 19:28:22 IST 日志:在 0/19FFE28 达到一致恢复状态 2014-07-14 19:28:22 IST 日志:0/19FFE28 处长度为零的记录 2014-07-14 …
我执行分页和,让我们说,行的排序products表,使用上多列索引category,score和id。
-- index
create index category_score_id on products(category, score, id)
where active = true;
-- selecting first page
select * from products where
category = 1
and active = true
order by score desc, id desc
limit 30;
-- selecting following pages
select * from products where
category = 1
and active = true
and (score, id) < (893, 102458) -- values from previous page
order by score desc, id desc
limit …Run Code Online (Sandbox Code Playgroud) 我对数据库设计和开发相当陌生。我的要求是基于时间和单词语言(特定日期的语言)进行简单的钻取/切片。但是,我的数据库是 mysql。但到目前为止,我还没有运行这些查询的运气,所以我手动计算这些数据并存储在表中。
为了更具体地说明我的应用程序,我需要在 iPhone 上显示图表/图形。因此,用户每天/每周/每月使用每种语言的单词。我不需要实时,但用户使用一个月的行数约为 5000。
我想了解 mysql 是否有可能拥有仓库模式并在没有性能问题的情况下执行此类查询。我的选择是什么。
我真的无法支付企业解决方案的费用,我准备在我的应用程序(我有)中为这种处理编写代码,但想迁移到正确的方式。
我想对我来说最理想的情况是不使用任何工具就可以在我当前的数据库中创建事实和维度,然后转移我的 api 来运行这些 olap 查询。从我收集的信息来看,这对于 mysql 是不可能的。Postgres 显示出一些希望,但仍在阅读。
根据 PGSQL 9.3 文档:
因为这并不总是需要,而且有很多关于如何索引的选择,外键约束的声明不会自动在引用列上创建索引。
然而,在我创建了这样一个约束之后,当我运行时,\d <table>我看到索引确实被创建了:
Indexes:
"table_primary_key" PRIMARY KEY, btree (id)
"fki_table_product_foreign_key" btree (product)
什么可以解释为什么会创建这个?我是否仍然需要在我的产品列上创建另一个索引来提高对它的查询性能?
假设我有一个person带有 id 和其他一些列的表。其他表person使用ON UPDATE CASCADE. 例如:
CREATE TABLE person (id int PRIMARY KEY);
CREATE TABLE sale (id int PRIMARY KEY,
person_id int REFERENCES person(id) ON UPDATE CASCADE);
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是:从 person 表中删除重复的条目,修复referencessale引用。例如,使用此数据:
INSERT INTO person values (1), (2), (3);
INSERT INTO sale VALUES (11, 1), (12, 2), (13, 3);
Run Code Online (Sandbox Code Playgroud)
Person1和2实际上是一样的,所以他们应该被“合并”。通过合并我的意思是不包括人2在更新的人引用1的sale表。
由于ON UPDATE CASCADE表上有一个引用person,我想知道是否有某种方法可以在不必手动更新sale表的情况下,在删除人的同时导致级联更新2
我在这里试图实现的是避免使用专用程序来更新引用,因为引用表的数量很可能会增加,需要在此过程中进行维护(并且已经相当大了)。
我在 RDS 上创建了数据库实例并使用了以下功能。它在本地开发机器上使用相同的 PostgreSQL 版本时出错。
create or replace function uuid() returns uuid as 'uuid-ossp', 'uuid_generate_v1' volatile strict language C;
Run Code Online (Sandbox Code Playgroud)
这是错误日志:
Run Code Online (Sandbox Code Playgroud)ERROR: permission denied for language c ********** Error ********** ERROR: permission denied for language c SQL state: 42501
我在 ruby on rails 3.2 中使用此函数为我的模式生成 uuid。
postgresql postgresql-9.2 postgresql-9.3 rails postgresql-extensions
我有一个表定义为:
create table dummy (jdata jsonb);
Run Code Online (Sandbox Code Playgroud)
我插入了以下两行:
insert into dummy values ('["dog","cat","elephant","waffle"]');
insert into dummy values ('[1,2,3,4]');
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 jsonb?&运算符,它可以让您提出问题“所有这些键/元素字符串都存在吗?”
使用字符串字段的示例有效:
select * from dummy where jdata ?& array['cat','dog'];
jdata
--------------------------------------
["dog", "cat", "elephant", "waffle"]
(1 row)
Run Code Online (Sandbox Code Playgroud)
但是,尝试使用包含数字的数组来执行此操作是行不通的:
select * from dummy where jdata ?& array['1','2'];
jdata
-------
(0 rows)
select * from dummy where jdata ?& array['1','2'];
jdata
-------
(0 rows)
select * from dummy where jdata ?& array[1,2];
ERROR: operator does not exist: jsonb ?& integer[]
LINE …Run Code Online (Sandbox Code Playgroud) 我在我的 postgresql 配置上打开了 archive_mode 以测试备份服务器。由于 wal 文件占用了大量磁盘空间,因此在测试后我将其关闭并删除了 wal 文件。当我尝试重新启动 postgresql 时,出现以下错误。
root@hooshang:/etc/postgresql/9.1/main# /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.1 database server
* The PostgreSQL server failed to start. Please check the log output:
2014-10-16 13:15:28 IRST LOG: database system was shut down at 2014-10-15 15:51:53 IRST
2014-10-16 13:15:28 IRST LOG: could not open file "pg_xlog/00000001000007DC00000037" (log file 2012, segment 55): No such file or directory
2014-10-16 13:15:28 IRST LOG: invalid primary checkpoint record
2014-10-16 13:15:28 IRST LOG: could not open file …Run Code Online (Sandbox Code Playgroud) postgresql backup checkpoint postgresql-9.1 write-ahead-logging
在 Java 中,我们使用 Joda-Time 来获取一天中的秒数作为 int 值(尽管是日期):
date: 10-10-2014 00:00:30 -> second 30 of day
date: 11-10-2014 00:01:30 -> second 90 of day
date: 12-10-2014 00:02:00 -> second 120 of day
Run Code Online (Sandbox Code Playgroud)
有没有办法在 PostgresSQL 中做同样的事情?
我们有一个 Postgresql 数据库,其中数据在 Latin1 中。显然有人将一些 UTF8 编码的数据加载到其中,因为当我从某些列中选择数据时,我得到如下内容:
SELECT symptoms from client
- -
"huvudvärke"
- -
Run Code Online (Sandbox Code Playgroud)
其中“ä”应该是“ä”。我可以用替换来处理它,即:
UPDATE client SET symptoms=replace(symptoms, 'ä', 'ä');
Run Code Online (Sandbox Code Playgroud)
我尝试了几个我找到的解决方案,比如使用convert和 ,convert_to但这使数据看起来像"huvudv\303\244rke".
我的问题有现有的解决方案吗?
编辑:
SELECT symptoms, symptoms::bytea from client
- -
"huvudvärke";"huvudv\303\203\302\244rke"
- -
Run Code Online (Sandbox Code Playgroud)
在上面的 UPDATE 之后,查询症状::bytea 输出:
SELECT symptoms, symptoms::bytea from client
- -
"huvudvärke";"huvudv\303\244rke"
- -
Run Code Online (Sandbox Code Playgroud)
编辑2:
select version();
"PostgreSQL 9.2.9, compiled by Visual C++ build 1600, 64-bit"
show client_encoding; --I'm using pgAdmin III 1.18.1
"UNICODE"
show server_encoding;
"UTF8" …Run Code Online (Sandbox Code Playgroud) postgresql ×10
index ×2
array ×1
backup ×1
bytea ×1
checkpoint ×1
datetime ×1
delete ×1
dynamic-sql ×1
foreign-key ×1
json ×1
mysql ×1
olap ×1
pgadmin ×1
rails ×1
update ×1