我是 postgres 的新手,
我在实时服务器上有一个 2000 万行的表 - 我需要删除大部分行但不是全部。我想这样做而不影响访问此表的其他读/写进程(非常频繁)。
我有一种方法可以一次删除大约 100-400K 行块。在每次删除之间,我想让查询休眠 - 以便其他操作可以有机会访问此表。
我有代码,但我相信这个版本,它在查询运行的整个时间(所有睡眠)都锁定表。我怎样才能在进程休眠时真正释放表?谢谢!!
到目前为止我的代码:
CREATE SEQUENCE tmp_sq increment by 1 minvalue 1 maxvalue 53 start with 1;
DO $$
DECLARE
w_counter integer;
BEGIN
w_counter := (SELECT nextval('tmp_sq'));
while w_counter < 53 loop
raise notice 'Value: %', w_counter ;
w_counter := (SELECT nextval('tmp_sq'));
-- this way of breaking up the delete into chunks works for my table because of dates.
delete from table_a where date_part('week',my_date) = w_counter;
raise notice ' …Run Code Online (Sandbox Code Playgroud) 作为存档过程的一部分,我正在将记录从一个数据库移动到另一个数据库。我想将行复制到目标表,然后从源表中删除相同的行。
我的问题是,在删除行之前检查第一次插入是否成功的最有效方法是什么。
我的想法是这样,但我觉得有更好的方法:
@num_records=select count(ID) from Source_Table where (criteria for eligible rows)
insert * into Destination_Table where (criteria for eligible rows)
if ((select count(ID) from Destination_Table where (criteria) )=@numrecords)
delete * from Source_Table where (criteria)
Run Code Online (Sandbox Code Playgroud)
将它与 RAISERROR 功能结合是否更好/可能?谢谢!
我试图了解 PostgreSQL 复制的最佳用途及其工作原理,以便我可以在生产环境中进行故障排除。
我很难理解这 2 种复制类型在(1)配置(2)2 台服务器主/从在每种情况下如何执行方面的差异
PostgreSQL (9.2+) 上的复制本质上是 16MB 大小的 XLOG 文件(取决于创建每个文件的频率设置)在 Master 上创建并通过某种方法发送到 Slave。
我的设置(针对这个问题)
Postgresql.conf 在 Master
archive_command上的配置
= 'rsync -av %p postgres@[SlaveIP]:[wal_archive_folder]/%f'
在 Slave 上配置 Recovery.conf 以读取日志文件
restore_command = 'cp [wal_archive_folder]/%f \"%p\"'
primary_conninfo = 'host=[MasterIP] port=5432 user=postgres'
我的问题是此配置的哪一部分使这种“流式”复制与“日志传送”不同?我的主服务器配置为使用 rsync 将日志发送到从服务器(此日志是否传送?)我的从服务器配置为能够连接到 recovery.conf 中的主服务器(这是流式传输吗?)
问题的第二部分:发生了什么?我知道通过 WAL_sender 和 WAL_receiver 在 PostgreSQL 上还有另一个协议。但我不清楚这是否仅用于流式传输,如果是,那么在 Master 中如何使用 rsync?
:) 谢谢!!对不起,如果这是一个明显的问题。我一直在做一堆阅读博客/书籍,但很难理解。Postgres wiki 非常深入,需要很长时间才能通读(而且我有截止日期)
我目前有 SQL Server 2008 R2,我想将其升级到 SQL 2012。我可以卸载 SQL 2008 并安装 SQL Server 的新副本或运行升级。升级工作较少,但我想知道是否有缺点。
我已经尝试过一次升级。遇到问题并且很难同时删除 SQL 2008 和 SQL 2012,所以我可以重新开始。升级成功后,我看到在添加/删除程序中,SQL 2008 R2 和 SQL 2012 之后仍然存在。这可能会使未来的升级/卸载变得复杂。
除此之外,与全新安装相比,使用升级还有其他缺点吗?
AdeptSQL Diff 似乎与 SQL Server 2012(此时)不兼容。它是我部署更改的首选工具。我意识到这是一个购物清单,但我希望 SE 不会介意。
我想知道什么是最好的选择,并想查询 DBA。
目前我正在评估 RedGate SQL 比较。它不包括数据比较(单独的产品),尽管它确实生成了很好的部署脚本。只是想要一些快速而轻松的东西来启动对生产服务器的架构更改。你有什么建议吗。谢谢!
在 Ubuntu 14.04 上运行 PostgreSQL 9.3,在 Windows 7 上运行 pgAdmin III 1.18.1。
我尝试过Tools->Server Status,但出现错误:
“无法读取目录“pg_log”没有这样的文件或目录”
我在网上没有看到任何答案。服务器主要设置为默认设置(用于日志记录)。我通过 pgAdmin 连接的用户是超级用户级别的帐户。
使用目的:监控将成为实时系统的内容。
我正在将数据库的兼容模式从 90 (SQL Server 2005) 更改为 110 (SQL 2012),我想知道在什么时候我会看到中断更改导致的错误(如果有的话)。
我运行了 Upgrade Advisor 2012,它发现了几个需要更新的存储过程。一个例子是:
“在 SQL Server 2005 或更高版本中,ORDER BY 子句中的列别名不能以表别名为前缀。”
但是,当我在 SQL 2012 中运行这个存储过程(没有做任何更改)时,它没有显示任何错误。此外,当我将数据库兼容性级别从 90 更改为 110 时,也没有错误。当我恢复数据库时也没有。
如果我没有在任何地方看到错误,我希望升级顾问能捕获所有内容。还有其他方法可以检查兼容性错误吗?
此外,即使升级顾问告诉我它会失败,这个存储过程怎么可能成功运行?谢谢 :)
我应该如何依赖 SQL Server 2012 数据库引擎优化顾问来创建索引和统计信息?我经常发现,它生成过于复杂的索引,(我认为)在索引维护方面比拥有这个索引的好处更昂贵。
如果我不能完全依赖数据库引擎优化顾问,是否有一种简单的方法?一本书或许一篇文章?
缺少的索引 DMV 并不是特别有用,因为我正在尝试为全新的表考虑索引。
使用 SQL 2012 企业版
按照此处的说明恢复备份:http : //msdn.microsoft.com/en-us/library/ms186390.aspx#Restrictions
我需要能够重命名数据库,因为它是实例上的第二个副本(测试目的)。但我无法重命名它,也无法更改它将 MDF/LDF 文件恢复到的文件夹。
无论出于何种原因,“将所有文件重定位到文件夹”复选框都不可用。
从 SQL 2005 备份还原。
启用 TDE 加密后,我的数据库备份文件 .bak 比以前大 3 倍。有没有办法改善这种情况?这是因为压缩对加密文件的效率不高吗?
我已经使用“apt-get install postgresql”在 ubuntu 14.04 上安装了 postgresql 9.3。
一切都很顺利,直到我发现我无法访问“pg_ctl”命令。安装 postgres-xc 实际上会破坏 postgresql 服务器。包链接失效。我无法重新安装并且不得不恢复我的 VM 并在没有 pg_ctl 的情况下继续工作。
我的问题是,要访问这个包,我应该从头开始还是卸载并重新安装 postgresql?我应该首先安装什么?或者,我的路径有问题吗?
(我是 postgresql 的新手,出于工作目的已经投入其中)
我正在使用 SQL Server 2012 并且我想保留我预先存在的数据但导致 ID(身份)列跳过 2000 行。
为什么会这样?我有一个场景,我可能会在备用服务器上发生事务,我需要将其复制到当前服务器。我希望 ID 匹配。因此,我不希望此服务器上的任何新事务与我的备用服务器具有相同的 ID。
希望这是有道理的!!谢谢
sql-server ×5
postgresql ×4
backup ×1
delete ×1
installation ×1
pgadmin ×1
plpgsql ×1
restore ×1
t-sql ×1
transparent-data-encryption ×1
upgrade ×1