整数超出范围且剩余磁盘空间太小无法将id转换为bigint等解决方案

2024-03-06

When I insert我正进入(状态integer out of range因为我的 id/主键被错误地创建为int代替bigint or bigserial。我试过:

ALTER TABLE tbl ALTER COLUMN id TYPE BIGINT;

但我收到以下错误,因为我的可用磁盘空间不够大。

ERROR: could not extend file "base/16401/3275205": No space left on device HINT: Check free disk space. SQL state: 53100

我现在无法增加磁盘空间,由于令人沮丧的原因,我不会详细说明。

我还尝试通过执行这些操作来重用 ids(我从该表中删除了很多记录,因此存在很大的间隙)seq over: https://dba.stackexchange.com/questions/111823/compacting-a-sequence-in-postgresql https://dba.stackexchange.com/questions/111823/compacting-a-sequence-in-postgresql

但对于该链接中的解决方案#1:我假设我没有磁盘空间。该表有 117GB,我有大约 24GB 可用空间...data/base。我确实有 150GB 可用空间用于存储我的临时文件(不同的安装),这不是默认配置,但这样做是为了节省数据库存储空间...data/base。如果我可以在临时文件位置创建表,这可能会起作用,但我不知道该怎么做。

对于该链接中的解决方案#2:当我到达update部分,我在 pgAdmin4 中得到了这个:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

但是,当我运行时查询仍在运行:

select pid,query,state,wait_event,* from pg_stat_activity where state <> 'idle'

我没有得到服务器日志update失败的查询。

我最终杀死了更新查询,认为它最终会失败。 (我再次运行这个,并让它运行上面的 html 错误,除非其他人有更好的主意。)

对于该链接中的解决方案#3:我有16GM的内存,所以不够用。

接下来从这里开始:如何重置 postgres 中的序列并用新数据填充 id 列? https://stackoverflow.com/questions/4678110/how-to-reset-sequence-in-postgres-and-fill-id-column-with-new-data

我试过这个:

UPDATE table SET id = DEFAULT;
ALTER SEQUENCE seq RESTART;
UPDATE table SET id = DEFAULT;

ERROR: integer out of range

当您尝试插入时,这会创建一个重复的键:

ALTER SEQUENCE seq RESTART WITH 1;
UPDATE t SET idcolumn=nextval('seq');

我还能尝试什么吗?

PostgreSQL 9.6


斯科特·马洛和 Vao Tsun 的评论很有效:

在(linux)服务器上打开终端

导航到想要新命名空间的位置

建立一个目录:mkdir dirname

将所有权赋予 postgres:chown postgres:postgres dirname

创建表:CREATE TABLESPACE new_tbl_space LOCATION '/path/dirname'

将表放入表空间:alter table tbl set tablespace '/path/dirname'

执行占用如此多磁盘空间的操作:ALTER TABLE tbl ALTER COLUMN id TYPE BIGINT;

将表空间改回:alter table tbl set tablespace pg_default

删除表空间:我在 pgadmin4 中这样做了Tablespaces节点/对象

(这是凭记忆写的。如果我错过了什么,请告诉我。)

编辑:这会产生重写整个表的副作用,就像完全真空释放任何死磁盘空间一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数超出范围且剩余磁盘空间太小无法将id转换为bigint等解决方案 的相关文章

随机推荐

  • Toolbar.inflateMenu 似乎什么也没做

    我目前正在研究新的 AppCompat 库 将材料设计带入旧设备 将工具栏设置为操作栏对我来说效果很好 但工具栏似乎在调用时没有执行任何操作inflateMenu int resId 从文档中 我认为这是替换getMenuInflater
  • c#: google Drive : google apis.services 您是否缺少程序集或引用

    我正在尝试使用快速入门示例将 google drive 用于 net 我已经通过 nuget 安装了 dll 但收到以下错误 指出我缺少 google apis service 的引用或程序集 任何帮助 将不胜感激 using System
  • 有没有一种简单的方法可以从流星部署的应用程序导出数据?

    有没有一种简单的方法可以从流星部署的应用程序导出数据 因此 例如 如果我部署了一个名为 test meteor com 的应用程序 我如何轻松下载该应用程序收集的数据 以便我可以使用已部署应用程序中的数据在本地运行它 要获取您在meteor
  • 查询缓存效率

    我正在使用 MySQLTuner pl 来优化我的网站 尽管我不完全确定如何解决其中一些问题 并且想知道是否有人可以帮助我 我运行 16GB RAM MySQL 设置如下 key buffer 1024M max allowed packe
  • C# 按值复制数组

    我有一个类型数组MyType types 我想制作这个数组的独立副本 我试过这个 MyType types2 new MyType types Length types2 types 但这会创建对第一个的引用 然后我尝试了 Array Co
  • 在 QTextEdit 中激活光标

    我无法找到一种方法来激活 QTextEdit 内的光标 而无需在实际的小部件内单击 我想要做的是 在 QTextEdit 窗口中键入一些内容 单击 QPushButton 并使光标在 QTextEdit 中保持活动状态 而无需再次单击窗口
  • 如何在 Xcode 4.0 中使用编译源?

    在 Xcode 3 0 中 您可以使用 组和文件 面板中的 项目目标 来删除不需要的依赖文件 以下是说明 单击 目标 旁边的箭头 直到在 组和文件 面板中将其展开 单击 xauth 旁边的箭头 单击编译源 删除以下 YAJL 依赖文件 在
  • 引导标准错误位于引导类中的什么位置?

    考虑以下引导程序 library MASS library boot c set seed 1 boot fn function data index mean data index output boot Boston medv boot
  • 如何用 South 重命名外键字段?

    重命名一个简单的 charfield 等似乎很容易 Django 如何使用 South 重命名模型字段 https stackoverflow com questions 3235995 django how to rename a mod
  • Django admin:如何格式化只读字段?

    我有一个模型 Director有两个 DateFields 和两个子类 代码如下 我正在尝试为每个主管创建一个管理页面 其中显示相应的子类实例 而不是Director实例 这部分很简单 我为每个子类创建一个内联 给主 ModelAdmin
  • 交货天数和交货订单数分在两个单独的列中。有没有办法获得有关订单的汇总统计信息?

    我在解释这一点时遇到了一些困难 所以请耐心等待 我对使用 Excel 也很陌生 所以如果有一个简单的修复方法 我提前道歉 I have two columns one listing number of days starting from
  • 使用 xmlrpc 和 jQuery 创建 WordPress 帖子

    我有一个动态页面 用户可以在其中填写一些字段 这些用户都将在 WordPress 博客上拥有一个帐户 我想让他们直接将网页生成的内容发布到博客上 我不想将他们的密码存储在服务器中 因此我想使用 JQuery 在客户端执行此操作 我已经看过标
  • 变量声明中的逗号是什么意思?

    我在中找到了这个includes parser Parser phpMediaWiki PHP 源代码 public function replaceInternalLinks2 s global wgExtraInterlanguageL
  • 如何在 Fog 中使用文件上传 S3 元数据?

    我努力了 my directory files create key key body body metadata custom x And my directory files create key key body body custo
  • android 地图 v2 自定义叠加层在缩放时消失

    当 MapTiler 生成的地图缓存中不包含缩放级别时 Android Maps v2 不会显示地图 我的理解是 Android 地图 v2 将使用给定图块缓存可用的最高缩放级别 那么为什么它要隐藏该图层呢 仔细检查 这是因为我实现的图块提
  • Pytest版本冲突错误

    更新 Debian Jessie 后 pytest 无法工作 py test Traceback most recent call last File usr bin py test line 5 in
  • 如何在intellij中运行spring boot应用程序?

    我想在 intellij idea 中运行演示 spring boot 应用程序 但出现错误 Error 3 32 java package org springframework boot does not exist My pom xm
  • 非平面图的平面化算法

    是否有一种流行的非平面图平面化算法 我目前正计划在 Boost Boost Graph Library 中为无向图实现正交平面布局算法 BGL 有一个实现来检查无向图的平面性 Boyer Myrvold 平面性测试 我计划使用此方法返回的平
  • 在 Mongoose 模式上保存数组属性

    我有一个猫鼬对象架构 类似于以下内容 var postSchema new Schema imagePost images url String text String 我正在尝试使用以下内容创建新帖子 var new post new P
  • 整数超出范围且剩余磁盘空间太小无法将id转换为bigint等解决方案

    When I insert我正进入 状态integer out of range因为我的 id 主键被错误地创建为int代替bigint or bigserial 我试过 ALTER TABLE tbl ALTER COLUMN id TY