PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

initdb:khởi tạo pg_authid ... FATAL:sai số biểu thức chỉ mục

Tôi gặp phải vấn đề tương tự sau khi biên dịch postgresql 8.1.4 với gcc 4.9.3.

Vấn đề dường như là cách postgres sử dụng để biểu diễn các mảng có độ dài thay đổi:

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 */

Trong một số trường hợp, đối với các vòng lặp truy cập 'giá trị', GCC giả định rằng chúng sẽ thực hiện nhiều nhất một lần lặp. Các vòng lặp như bên dưới (được trích xuất từ ​​mã nguồn của postgres):

ii->ii_NumIndexAttrs = numKeys;
for (i = 0; i < numKeys; i++)
    ii->ii_KeyAttrNumbers[i] = indexStruct->indkey.values[i];

cuối cùng có thể bị giảm thành một cái gì đó như:

ii->ii_NumIndexAttrs = numKeys;
if (numKeys)
    ii->ii_KeyAttrNumbers[0] = indexStruct->indkey.values[0];

như được suy ra bằng cách xem trình hợp dịch được tạo cho nó:

.L161:
    testl   %r12d, %r12d
    movl    %r12d, 4(%rbx)
    jle .L162
    movzwl  40(%r13), %eax
    movw    %ax, 8(%rbx)
.L162:

Sự cố đã biến mất sau khi biên dịch lại các postgres với tính năng tối ưu hóa đó đã bị vô hiệu hóa bằng cách sử dụng -fno-Active-loop-Optimizations.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập dữ liệu tệp CSV vào bảng PostgreSQL?

  2. Làm cách nào để có được kích thước của một cột ARRAY?

  3. Sao chép một bản ghi, sau đó sử dụng id gia tăng tự động của nó cho các hoạt động tiếp theo

  4. Cách sử dụng homebrew để hạ cấp postgresql từ 10.1 xuống 9.6 trên Mac OS

  5. Cách gắn khối lượng postgresql bằng Aws EBS trong Kubernete