PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

initdb:инициализиране на pg_authid ... ФАТАЛНО:грешен брой изрази на индекса

Сблъсках се със същия проблем, след като компилирах postgresql 8.1.4 с gcc 4.9.3.

Проблемът изглежда е в начина, по който 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy func.count на булева колона

  2. Инкрементални дати на PostgreSQL?

  3. pgbackups на Heroku не е намерен

  4. Как да получите списъка с функции в базата данни в PostgreSQL заедно с нейните параметри?

  5. как да конвертирам текст в jsonB