我们的数据库中有一个 MyISAM 表,其中包含大约 97 GB 的数据,导致磁盘利用率为 95%。因此,我们开始通过删除行来清除表中的数据,但这也没有导致清除空间。
因此,我们了解到有关触发优化表命令的信息,但由于空间不足,该命令被中断,导致表被损坏。
现在我的问题是,如果我们删除损坏的表,它会释放我的磁盘空间吗?另外,删除查询是否需要像优化查询那样需要大量空间来执行?
我们的数据库中有一个 MyISAM 表,其中包含大约 97 GB 的数据,导致磁盘利用率为 95%。因此,我们开始通过删除行来清除表中的数据,但这也没有导致清除空间。
因此,我们了解到有关触发优化表命令的信息,但由于空间不足,该命令被中断,导致表被损坏。
现在我的问题是,如果我们删除损坏的表,它会释放我的磁盘空间吗?另外,删除查询是否需要像优化查询那样需要大量空间来执行?
我是一名本科生,还没有使用过任何实际的数据库,所以如果我误解/误用任何术语,我深表歉意。我的问题来自我的一项作业,但这是我学习的尝试,而不是让我做作业。
任务,解释一下:
某大学的打印服务允许校园内的学生将文件上传到系统,并将上传的文件发送到大学的一台打印机进行打印...系统记录所有学生完成的所有打印,记录学生的 ID、使用哪台打印机、打印文件的名称以及打印时间。系统管理员应该能够查看过滤到任何学生、打印机和/或时间段的日志文件(据我所知,这需要索引)。
我遇到的一个问题是我应该使用哪种数据存储方法(数据库或文件系统)来存储学生的文件和日志文件,这两者都是频繁增长的数据。
从这个SO问题我了解到,频繁更新的文件最好存储为文件系统存储,并且从这个问题可以将文件存储在带有blob的数据库中。
我的问题是:
FETCH FIRST
PostgreSQL和PostgreSQL之间有什么区别FETCH NEXT
?文档只是说
NEXT 获取下一行
FIRST 获取查询的第一行
这没什么解释。我创建了一个包含示例行的示例表,并执行
SELECT * from users
FETCH FIRST 2 ROWS ONLY;
SELECT * from users
FETCH NEXT 2 ROWS ONLY;
并得到完全相同的输出。它几乎就像 ifFETCH FIRST
和FETCH NEXT
只是同义词LIMIT
(我读到,它不是 SQL 标准的一部分,与 不同FETCH [FIRST|NEXT]
)
如果两者相同,为什么文档不这么说?还是毕竟存在一些差异?
这个 Stack Overflow 答案意味着它们至少在某些 RDBMS 中可能以相同的方式运行,特别是在 MS Server 中
我正在编写一个处理作业的应用程序。一个作业做两件非事务性的事情:A 部分和 B 部分。两者都是幂等的。
一个职位有三种状态:
逻辑看起来像这样:
BEGIN;
let jobId = randomUUID
INSERT INTO jobs (id, status) VALUES (jobId, 'Created');
COMMIT;
BEGIN;
do partA in application code (make HTTP request)
UPDATE jobs SET status = 'PartA_Done' WHERE id=?
COMMIT;
BEGIN;
do partB in application code (make HTTP request)
UPDATE jobs SET status = 'PartB_Done' WHERE id=?
COMMIT;
PartA 可能会成功,但无法更新jobs
表。重试 cron 作业将重试完成PartB_Done
。
如果我要添加多个 cron 作业(即同时运行),则存在 cron 作业执行重复工作的风险。特别是,两个 cron 作业都可以重复执行PartA
,PartB
或者都可以重复执行同一个作业。我想避免这种情况。
有什么方法可以让我执行, 同时在我添加的新行上的后续事务中COMMIT
保持锁定?FOR UPDATE
jobs
我认为这COMMIT AND CHAIN
会起作用,但我不知道该怎么做。
在 SQL Server 数据库中,UPDATE 和 DELETE 语句中的目标表上的WITH (NOLOCK) 查询提示将被忽略。但是,这是否也适用于更新或删除连接中包含的表?例如,是:
update t
set value1 = 123
FROM mytable t
inner join othertable o with (nolock) on t.id = o.id
相当于:
update t
set value1 = 123
FROM mytable t
inner join othertable o on t.id = o.id
我正在尝试在 AWS RDS 中执行 PostgreSQL 11.21 的蓝/绿升级。
数据库集群没有复制槽。但是,每次尝试都失败Incompatible-create
,日志消息为“由于外部复制,副本创建被取消”。
而已。出现此日志消息的原因可能是什么?没有任何其他信息,甚至谷歌也没有对此消息的任何结果。
我尝试应用其中任何一个来创建 read_only_user:
在所有情况下,新的 read_only_user 都能够在我的数据库(此处:MicroReseau)中创建一个新表,我想阻止这种情况发生。
为什么 read_only_user 可以创建新表以及如何防止这种情况?
附加信息:
根据日志文件,我收到以下错误。
“/usr/lib/postgresql/12/bin/pg_ctl”找到了程序“postgres”,但与 pg_ctl 的版本不同。检查您的安装。
我运行的是 Ubuntu 20.04。
我执行了以下命令来确定正在运行的版本:
# /usr/lib/postgresql/12/bin/postgres --version
postgres (PostgreSQL) 12.16 (Ubuntu 12.16-0ubuntu0.20.04.1)
# /usr/lib/postgresql/12/bin/pg_ctl --version
pg_ctl (PostgreSQL) 12.15 (Ubuntu 12.15-0ubuntu0.20.04.1)
由于当前情况使我的数据库服务器无用并且我有一些无法访问的数据库,我是否需要更新或执行某些任务?
另外,现在当我运行命令时,我收到此错误:
postgres@tvsr-strapi:~$ psql
psql: error: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
postgres@tvsr-strapi:~$
我已经尝试重新创建符号链接,但仍然不起作用。
我遇到了表上缺少索引的问题,我收集线索的唯一方法是这样:
BEGIN TRANSACTION;
-- OVER 100 DELETES
COMMIT;
在 DBeaver 中,我仅选择了第一行和后续的删除,并执行了该操作。然后,选择提交行,执行它并等待,直到我觉得这花费了太长时间。
然后,当我取消事务时,DBeaver 给了我这条消息:
SQL Error [57014]: ERROR: canceling statement due to user request
Where: SQL statement "SELECT 1 FROM ONLY "schema"."table" x WHERE $1 OPERATOR(pg_catalog.=) "id_model" AND $2 OPERATOR(pg_catalog.=) "id_property1" AND $3 OPERATOR(pg_catalog.=) "id_property2" FOR KEY SHARE OF x"
id_model
是所有相关 DELETE 的 WHERE 子句。消息中提到的查询绝对不是我编写的代码,位于我能想到的任何函数/过程/触发器中的任何位置。
我从中得出,table
列上缺少索引id_property1
是id_property2
问题所在,显然确实如此。
当服务器正在处理事务中排队的多个语句时,是否有任何日志解释“幕后”发生的情况,我可以更轻松地找到该语句?
模型中配置了几个删除外键约束,所以我猜当索引丢失时,服务器需要一段时间才能找到正确的方法?