我即将设计一个将与 PostgreSQL 一起运行的数据库。我习惯了名为 MySQL Workbench for MySQL 数据库的宏伟工具。它很有用,而且看起来不错,这是我对数据库设计软件的期望。
如果我要学习一种新的数据库设计工具,我希望它成为最受欢迎的工具。因此,我的问题是:在 PostgreSQL 中设计数据库最流行的工具是什么?
Stack Overflow Q & A Modify OWNER on all table 同时在 PostgreSQL 中描述了一些漂亮的方法来将表和其他对象更改为特定用户,并且它工作得很好,但是所有的建议似乎都忽略了我创建的函数。
是否有一种相当简单的方法来重置数据库中所有对象的所有者,包括函数?手工操作是非常不可取的。
我正在拼命寻找一种转换工具来将大型 mysql 数据库转换为 postgresql。我需要的工具/脚本是:
我尝试了此处列出的不同工具,但没有一个对我有用。
先感谢您。
我正在对 PostgreSQL 复制进行概念验证。在论坛上讨论后,我们决定使用流式复制,因为与其他解决方案相比,它的性能很好。PostgreSQL 不为流式复制提供自动故障转移。我们可以使用触发文件将从站切换到主站,但它是不可管理的。所以我想要一个具有自动故障转移和高可用性的解决方案。
有不同的解决方案:
我的问题是应该使用哪种解决方案?
我正在评估 PostgreSQL 9.1 并且几乎没有与故障转移和复制细节相关的问题。
我的测试场景很少。第一个有一个主服务器和几个从服务器。如果 Master 崩溃,我希望其中一个 Slaves 成为 Master。在 Master 恢复正常状态后,它应该与集群中的其他服务器同步(应用它关闭时所做的所有更改)并重新声明 Master 角色或成为 Slave。
我在 PostgreSQL 和当前场景中看到的问题如下。
1) 我没有看到用于检测主服务器中断的内置工具。我读到 pgpool 可以处理它并创建触发器文件,我还读到人们为此使用 Linux 心跳或类似工具。好的,我可以检测故障转移并在集群中分配一个新的 Master。其他Slaves会不会明白有一个新的Master,他们现在应该备份它?
2) 我不明白故障回复程序。Master 和 Slave 主机配置不同。那么在崩溃的 Master 故障回复之后我会有两个 Master 吗?服务器将如何恢复同步?我只看到手动解决方案,例如“将数据文件夹传输到服务器并重新启动它”。那么这里的解决方案或最佳实践或至少是关键原则是什么?
3)我应该如何处理客户端的服务器中断?创建连接时,我明确指定了服务器 IP。我是否应该开发某种连接管理器,它会知道我的主从结构,仅向主发送请求,并且在连接丢失的情况下将切换到备份服务器等等?我读到 pgpool 可以作为应用程序的入口点并以正确的方式管理连接。pgpool 是这里唯一的解决方案吗?它是否能很好地处理故障转移和故障恢复?
4)是否有任何解决方案(商业),这样我就可以避免手动复制数据、重新配置 PostgreSQL 实例和其他应该手动完成的事情?那种大家同步的集群配置,谁是Master一目了然,一切自动切换,无需操作员注意?
根据这些线程和文章
http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html
没有单一的全自动解决方案可以解决这些问题。我对吗?
谢谢!
我正在开发一个开发系统,我一直在恢复到一个数据库,比如“foo”,我用于开发目的。当我解决这些问题时,我一直在运行 DROP DATABASE foo。但是,我很快意识到我已经吃光了磁盘上的所有空间。废话。
来自不同逻辑数据库的 VACUUM FULL 是否从我之前删除的数据库中释放空间 (foo)?我从不同的逻辑数据库尝试了这个,并且回收了可用空间,但我认为这不足以解释我所做的所有 CREATE DATABASE/DROP DATABASE 调用。它可能只是对我运行的逻辑数据库进行了 VACUUM 处理。
必须有一种方法可以在不执行整个数据库初始化的情况下回收该空间?
编辑
所以我从备份中重新初始化了数据库,大致遵循这些步骤。恢复后,我在磁盘上回收了大量空间!这暂时有效,但有关如何清理删除的数据库的任何帮助仍然有用。
编辑 2
所以我设法收集了一些关于这个问题的更多信息......这是我想出的一个例子:
Initial partition size:
Size Used Avail Use% Mounted on
25G 8.1G 16G 35% /apps1
After creating my new database and populating it:
25G 18G 6.4G 73% /apps1
After Dropping the database using "DROP database mydb" from a separate logical DB:
25G 13G 11G 56% /apps1
Run Code Online (Sandbox Code Playgroud)
所以在我看来,新数据库在磁盘上占用了大约 9.6 GB。但是,删除后,回收的磁盘空间仅增加了约 4.6G。所以,大约有 5 GB 的空间让我想知道发生了什么!?
当我重新创建、填充和再次删除时,它会继续这个循环。
有没有人知道发出“DROP DATABASE”命令后有什么东西挥之不去?
我在 Postgres 8.3 中运行一个 plpgsql 脚本 - 我想通过 psql 将参数传递给这个脚本。我目前正在执行这样的脚本:
psql -d database -u user -f update_file.sql
Run Code Online (Sandbox Code Playgroud)
我遇到了这个链接,它解释了 PGOPTIONS 环境变量,但这不适用于“自定义”参数。即我收到一个错误,因为该设置未在 postgres.conf 文件中列出。
-bash-3.2$ export PGOPTIONS='--pretend=true'
-bash-3.2$ psql -d my_db -f update_database.sql
psql: FATAL: unrecognized configuration parameter "pretend"
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?理想情况下,我想避免环境变量...
我有两个表,“hierarchy_table”和“name_table”。
层次结构表包含一个具有多个父级和子级的对象。每个父级和子级都由 id 引用。
| object_id | parent_id_1 | parent_id_2 | child_id_1 | child_id_2 |
-----------------------------------------------------------------------------
| 1234 | 9999 | 9567 | 5555 | 5556 |
-----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
hierarchy_table 中的每个对象 id 在 name_table 中都有一个条目:
| name_id | name |
--------------------------
| 1234 | ABCD |
--------------------------
| 9999 | ZYXW |
--------------------------
| ...
Run Code Online (Sandbox Code Playgroud)
如何将hierarchy_table 中的每个id 多次加入name_table,以便我可以得到填充每个名称的结果?
像这样:
| object | parent_1 | parent_2 | child_1 | child_2 |
-----------------------------------------------------------------------------
| ABCD | ZYXW | BBBB | CCCC | DDDD …Run Code Online (Sandbox Code Playgroud) PostgreSQL 中的更新后和更新前有什么区别?我无法理解 和 之间的区别after update,before update因为看起来该函数总是在更新之前执行。
所以我做了下面的例子:
我做了一个函数,当状态为typing但延迟 10 秒时更新表。
CREATE OR REPLACE FUNCTION fai_prueba()
RETURNS trigger AS
$BODY$
begin
if new.status = 'Typing' then
update image set status = 'ToTyping', path = 'Real path' from pg_sleep(5) where id = old.id;
end if;
return null;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION fai_prueba()
OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
然后我有以下触发器
create trigger tai
after update on image
for each row execute procedure fai_prueba();
Run Code Online (Sandbox Code Playgroud)
但是当我运行 UPDATE …
我刚刚开始使用 Postgres。阅读此文档时,我遇到了以下查询:
SELECT title, ts_rank_cd(textsearch, query) AS rank
FROM apod, to_tsquery('neutrino|(dark & matter)') query
WHERE query @@ textsearch
ORDER BY rank DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
我可以理解这个查询中的所有内容,除了这个:FROM apod, ...。
这,是什么意思?我习惯于连接但不习惯于用FROM逗号分隔的多个语句。
我在网上搜索无果。在查看并思考之后,在我看来,它声明了一个名为 query 的变量,因此它可以多次使用它。但如果这是真的,这与什么有关系FROM?