将使用区域设置en_US.UTF-8初始化数据库群集.
因此,默认数据库编码已设置为UTF8.
creating directory p01/pgsql/data ... okcreating subdirectorIEs ... okselecting default max_connections ... 100selecting default shared_buffers/max_fsm_pages ... 24MB/153600creating configuration files ... okcreating template1 database in p01/pgsql/data/base/1 ... okinitializing pg_authID ... FATAL: wrong number of index ExpressionsSTATEMENT: CREATE TRIGGER pg_sync_pg_database AFTER INSERT OR UPDATE OR DELETE ON pg_database FOR EACH STATEMENT EXECUTE PROCEDURE flatfile_update_trigger();child process exited with exit code 1initdb: removing data directory "p01/pgsql/data"
帮帮我!!
谢谢!
问题似乎是postgres用来表示可变长度数组的方式:
typedef struct{ int32 size; /* these fIElds must match ArrayType! */ int ndim; int flags; OID elemtype; int dim1; int lbound1; int2 values[1]; /* VARIABLE LENGTH ARRAY */} int2vector; /* VARIABLE LENGTH STRUCT */
在某些情况下,对于访问“值”的循环,GCC假定它们最多只进行一次迭代.循环如下(从postgres的源代码中提取):
ii->ii_NumIndexAttrs = numKeys;for (i = 0; i < numKeys; i++) ii->ii_KeyAttrNumbers[i] = indexStruct->indkey.values[i];
可能最终被缩减为:
ii->ii_NumIndexAttrs = numKeys;if (numKeys) ii->ii_KeyAttrNumbers[0] = indexStruct->indkey.values[0];
通过查看为其生成的汇编程序推断:
.L161: testl %r12d,%r12d movl %r12d,4(%rbx) jle .L162 movzwl 40(%r13),%eax movw %ax,8(%rbx).L162:
重新编译postgres后,通过使用-fno-aggressive-loop-optimizations禁用了该优化,问题就消失了.
总结以上是内存溢出为你收集整理的postgresql – initdb:初始化pg_authid …致命:索引表达式数量错误全部内容,希望文章能够帮你解决postgresql – initdb:初始化pg_authid …致命:索引表达式数量错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)