PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

initdb:menginisialisasi pg_authid ... FATAL:jumlah ekspresi indeks yang salah

Saya mengalami masalah yang sama setelah mengkompilasi postgresql 8.1.4 dengan gcc 4.9.3.

Masalahnya tampaknya adalah cara yang digunakan postgres untuk merepresentasikan array panjang variabel:

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

Dalam beberapa kasus, untuk loop yang mengakses 'nilai', GCC mengasumsikan bahwa mereka akan melakukan paling banyak satu iterasi. Loop seperti di bawah ini (diekstrak dari kode sumber postgres):

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

mungkin akhirnya direduksi menjadi sesuatu seperti:

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

seperti yang disimpulkan dengan melihat assembler yang dihasilkan untuknya:

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

Masalahnya hilang setelah mengkompilasi ulang postgres dengan pengoptimalan yang dinonaktifkan dengan menggunakan -fno-aggressive-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. Nonaktifkan pemeriksaan kunci asing PostgreSQL untuk migrasi

  2. 4 Cara Memilih Baris Duplikat di PostgreSQL

  3. Bagaimana Cosd() Bekerja di PostgreSQL

  4. menggunakan COPY FROM di aplikasi Rails di Heroku dengan backend Postgresql

  5. kubernetes timescaledb statefulset:Perubahan hilang pada rekreasi pod