我们不断地在办公室里讨论这个问题,这个问题不断出现。你如何处理 PostgreSQL 复制?我什至不一定在谈论高级集群,只是通过 Master-Slave、Master-MultiSlave 和 Master-Master 来保持简单。我发现为 MySQL 设置它通常非常简单。故障转移即使不完美也很简单,尤其是配置起来如此简单。我们玩过 Slony,但它有点过于动手(架构更改需要干预,新数据库需要干预等)。PGPool2 非常好,直到一个节点出现故障并且我们找不到一种优雅的方式(除了将所有东西都关闭并重新播种倒下的节点)来使复制恢复同步。基本上这就是我通常要寻找的:
MySQL 可以很好地处理其中的大部分,但我对 PostgreSQL 有一定的喜爱。此外,在某些情况下,这是我们唯一的选择,我们希望将复制添加到组合中。您目前使用的是什么,您对您的解决方案有何看法?我保证,这不是 MySQL 与 PostgreSQL 的对比,因为这不是我想要开始的。:)
我在一个 VPC 中创建了一个基本的测试 PostgreSQL RDS 实例,该实例具有一个公共子网,并且应该可以通过公共 Internet 进行连接。它使用对端口 5432 开放的默认安全组。当我尝试连接时,它失败了。我一定错过了一些非常简单的东西——但我对此很迷茫。
这是数据库设置,注意它被标记为Publicly Accessible:

这是安全组设置,请注意它是完全开放的(在上面的 RDS 设置中由端点旁边的绿色“授权”提示确认):

这是我试图用来连接的命令:
psql --host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
--port=5432
--username=masteruser
--password
--dbname=testdb
Run Code Online (Sandbox Code Playgroud)
这是我尝试从 Yosemite MacBook Pro 连接时得到的结果(注意,它解析为 54.* ip 地址):
psql: could not connect to server: Operation timed out
Is the server running on host "myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com" (54.xxx.xxx.xxx) and accepting
TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)
我没有启用任何类型的防火墙,并且能够连接到其他提供商(例如 Heroku)上的公共 PostgreSQL 实例。
任何故障排除提示将不胜感激,因为我在这里几乎不知所措。
更新
根据评论,以下是默认 VPC 的入站 ACL 规则:

有没有办法导出 PostgreSQL 数据库,然后用另一个名称导入它?
我在 Rails 中使用 PostgreSQL,我经常从生产中导出数据,其中数据库名为 blah_production,并在开发或暂存时将其导入,名称为 blah_development 和 blah_staging。在 MySQL 上,这是微不足道的,因为导出在任何地方都没有数据库(可能除了注释),但在 PostgreSQL 上这似乎是不可能的。不可能吗?
我目前正在以这种方式转储数据库:
pg_dump blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
我没有使用 -c 或 -C 选项。该转储包含以下语句:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Run Code Online (Sandbox Code Playgroud)
当我尝试导入时
psql blah_devel < blah.dump
Run Code Online (Sandbox Code Playgroud)
我得到
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Run Code Online (Sandbox Code Playgroud)
也许问题真的不是数据库而是角色?
如果我以这种方式倾倒它:
pg_dump --format=c blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
并尝试以这种方式导入它:
pg_restore -d blah_devel < tmp/blah.psql
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
pg_restore: WARNING: database "blah" does …Run Code Online (Sandbox Code Playgroud) 我正在 ubuntu 12.04 服务器上启动 postgres 9.3 实例:
~# service postgresql start
* The PostgreSQL server failed to start. Please check the log output.
[fail]
Run Code Online (Sandbox Code Playgroud)
启动失败,但没有留下任何日志,此文件为空:
tail /var/log/postgresql/postgresql-9.3-main.log
Run Code Online (Sandbox Code Playgroud)
并且此目录中没有其他文件:/var/log/postgresql/
解决此问题的最佳方法是什么?
假设您看到此消息:
FATAL: Ident authentication failed for user "..."
Run Code Online (Sandbox Code Playgroud)
出现此错误消息的原因是什么?
我正在运行这个命令:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2
Run Code Online (Sandbox Code Playgroud)
这需要太长时间。我用top. bzip2 进程占用一个内核的大约 95% 和 postgres 的 5%。该wa条目是低的。这意味着磁盘不是瓶颈。
我可以做些什么来提高性能?
也许让 bzip2 使用更多的内核。服务器有 16 个内核。
或者使用 bzip2 的替代品?
我可以做些什么来提高性能?
我正在编写一个 shell 脚本,它使用 2 种形式调用 psql……一种是通过命令(-c),另一种是通过文件(-f)。
例如 psql -c "创建表 foo (bar integer)"
psql -f foobar.sql
这些形式之间的一个区别是,如果遇到错误,通过命令 (-c) 的调用将返回非零退出代码,而通过文件 (-f) 的调用似乎总是返回零。
我想知道这种行为是否有解决方法?(即,如果在执行文件时发生错误,则返回非零值)。
谢谢。
与此问题类似,我将如何在 PostgreSQL 中执行仅模式转储?
所以,情况就是这样。看来我们需要一个开放的 TCP 端口 5432 到全世界,客户可以访问他的 PostgreSQL 数据库。
出于显而易见的原因,我们不能只说“不”,只能作为最后的手段。
最大的困难是什么?如何保护我们的基础设施?
无论如何:为什么不应该向世界开放?我想,也许它比一些已有 20 年历史、无人维护的 FTP 服务器更安全。
PS VPN 不行。一些加密可能(如果我可以给他其中JDBC连接URL的作品)。
我通过 Homebrew 安装了 postgresql。
升级后出现以下问题:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.1.2.
关于如何升级的任何提示?我尝试了以下方法:
$ pg_upgrade -d /usr/local/var/postgres/ -D /usr/local/var/postgres -b
/usr/local/Cellar/postgresql/9.0.4/bin -B /usr/local/Cellar/postgresql/9.1.2/bin
Run Code Online (Sandbox Code Playgroud)
它没有用。这是输出。
Performing Consistency Checks
Checking current, bin, and data directories ok
Checking cluster versions
This utility can only upgrade to PostgreSQL version 9.1.
Failure, exiting
Run Code Online (Sandbox Code Playgroud)
错误。
postgresql ×10
database ×3
linux ×2
restore ×2
amazon-rds ×1
backup ×1
dump ×1
gzip ×1
internet ×1
networking ×1
performance ×1
psql ×1
rds ×1
replication ×1
schema ×1
security ×1
sql ×1