PostgreSQL:“索引行需要1460216字节,最大大小为8191”

时间:2018-06-21 07:30:42

标签: 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声明以下内容:

  

索引行需要1460216字节,最大大小为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完成的...我应该吗?

1 个答案:

答案 0 :(得分:0)

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

否则,您也许可以对GIN索引或GIN索引使用pg_trgm运算符使用全文搜索。