python - PostgreSQL: "index row requires 1460216 bytes, maximum size is 8191"

标签 python postgresql indexing

我是 PostgreSQL 的新手,我正在尝试用 Python 中构建的字典列表的内容填充一个表,它看起来像:

diclist = [{'accession':'value', 'species':'value', 'seq':'value', 'length': 'value'}, {'accession':'value', 'species':'value', 'seq':'value', 'length': 'value'}, ...]

'seq' 值是有时超过 300.000 个字符的字符串...

但是,我的数据包含相当长的基因序列,因此当我尝试将这些数据加载到表中时,PostgreSQL 声明如下:

index row requires 1460216 bytes, maximum size is 8191

有没有办法增加行索引的最大大小??或者有没有办法压缩我的数据所需的空间?

我知道 BioPython 和 BioSQL 是用来处理基因序列的,但它们并不完全符合我的需要...

这是我目前构建的函数(diclist 是词典列表):

def insert_biosequence(diclist):
try:
params = config()
conn = psycopg2.connect(**params)
cur = conn.cursor()
cur.executemany("""INSERT INTO biosequence(accession, species, seq, length) VALUES (%(accession)s, %(species)s, %(seq)s, %(length)s)""", diclist)
conn.commit()
cur.close()
  except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
  conn.close()

我的 CREATE TABLE 命令如下:

CREATE TABLE biosequence (
accession TEXT,
species TEXT,
seq TEXT PRIMARY KEY,
length INTEGER

);

我没有使用任何 INDEX 命令,我认为它是由 PostgreSQL 默认完成的......我应该这样做吗?

最佳答案

鉴于您的数据是结构化的,您可能希望创建一个更适合您的结构的模式,然后以该格式加载它,而不仅仅是原始源数据,或者至少加载原始数据,然后将其转换为您的结构格式以便于搜索。

否则,您可以使用带有 GIN 索引的全文搜索或带有 pg_trgm 运算符的 GIN 索引。

关于python - PostgreSQL: "index row requires 1460216 bytes, maximum size is 8191",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962803/

相关文章:

postgresql - 升级 PostgreSQL 数据库。函数会发生什么?

sql - PostgreSQL 添加常量时间到日期函数:now()::date

node.js - 使用 $gt 和 $ne 的 MongoDB 查询索引

python - 如何在 KNN 中的 minkowski 度量中设置 p < 1?

python - Pandas Dataframe 更新行

python - 什么可能导致 NetworkX 和 PyGraphViz 单独工作但不能一起工作?

postgresql - SQLAlchemy 核心 CREATE TEMPORARY TABLE AS

mysql不使用索引?

string - 在 COBOL 中查找子字符串的索引

python - Pandas 数据帧 : Creating a new column based on data from other columns