在我的open-erp应用程序中,我收到以下错误:
2015-04-01 09:35:55,959 4169 ERROR new_db openerp.sql_db: bad query: ALTER TABLE "product_product" ADD COLUMN "location" VARCHAR
Traceback (most recent call last):
File "/opt/openerp/server/openerp/sql_db.py", line 226, in execute
res = self._obj.execute(query, params)
OperationalError: tables can have at most 1600 columns
2015-04-01 09:35:55,960 4169 ERROR new_db openerp: Failed to initialize database `new_db`.
Traceback (most recent call last):
File "/opt/openerp/server/openerp/cli/server.py", line 97, in preload_registry
db, registry = openerp.pooler.get_db_and_pool(dbname,update_module=update_module)
File "/opt/openerp/server/openerp/pooler.py", line 33, in get_db_and_pool
registry = RegistryManager.get(db_name, force_demo, status, update_module)
File "/opt/openerp/server/openerp/modules/registry.py", line 203, in get
update_module)
File "/opt/openerp/server/openerp/modules/registry.py", line 233, in new
openerp.modules.load_modules(registry.db, force_demo, status, update_module)
File "/opt/openerp/server/openerp/modules/loading.py", line 350, in load_modules
force, status, report, loaded_modules, update_module)
File "/opt/openerp/server/openerp/modules/loading.py", line 256, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/opt/openerp/server/openerp/modules/loading.py", line 165, in load_module_graph
init_module_models(cr, package.name, models)
File "/opt/openerp/server/openerp/modules/module.py", line 374, in init_module_models
result = obj._auto_init(cr, {'module': module_name})
File "/opt/openerp/server/openerp/osv/orm.py", line 3164, in _auto_init
cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, get_pg_type(f)[1]))
File "/opt/openerp/server/openerp/sql_db.py", line 161, in wrapper
return f(self, *args, **kwargs)
File "/opt/openerp/server/openerp/sql_db.py", line 226, in execute
res = self._obj.execute(query, params)
OperationalError: tables can have at most 1600 columns
我从product_product表中删除了不必要的列,但仍然出现上述错误。
如何解决,请建议我。 等待回复。 感谢
答案 0 :(得分:3)
我知道这可能有点晚了(也许你已经在旅行中找到了这个答案)但是在撰写本文时(2016年8月)从Postgres数据库表中删除一列实际上并没有从列中删除列表空间,它只是隐藏它,列仍然计入表空间的列限制,请参阅Postgres关于ALTER TABLE
操作的文档。
“ DROP COLUMN表单没有物理删除列,只是使它对SQL操作不可见。表中的后续插入和更新操作将为列存储空值。因此,删除列是快速,但它不会立即减少表的磁盘大小,因为删除列所占用的空间不会被回收。随着现有行的更新,空间将被回收。(这些语句在删除时不适用system oid column;即时重写即可完成。)“
来源:https://www.postgresql.org/docs/9.5/static/sql-altertable.html
因此,如果您有迁移或某些操作在表格上重复执行DROP / ADD循环,您将开始耗尽可用列,直到达到限制。
删除表并重新创建它,或者使用INSERT INTO
将数据复制到新表中(尽管您必须重新创建外键等),将导致一个干净的表,而不是全部(隐藏)从以前的操作中删除列。这将有效地重置您的列数。
答案 1 :(得分:0)
这是因为ir.model.fields
表中的所有列都存在,与ir.model
相关的列是1。你需要从那里删除。
您还可以从用户界面中删除列。
转到Settings -> Database structure -> Models
找到你的模型并从那里删除字段。
我希望它可以帮到你。
答案 2 :(得分:0)
帮助我减少colums数量的快速修复是将数据库转储到文件,删除数据库,然后重新创建它,如下所示:
sudo su - postgres
pg_dump nameOfDatabase > backup.psql
dropdb nameOfDatabase
createdb --owner nameOfOwner nameOfDatabase
psql -d nameOfDatabase -f backup.psql
logout