sql >> Database >  >> RDS >> PostgreSQL

initdb:pg_authid initialiseren ... FATAL:verkeerd aantal index-expressies

Ik kwam hetzelfde probleem tegen na het compileren van postgresql 8.1.4 met gcc 4.9.3.

Het probleem lijkt de manier te zijn waarop postgres arrays met variabele lengte weergeeft:

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

In sommige gevallen, voor lussen die toegang hebben tot 'waarden', gaat GCC ervan uit dat ze maximaal één iteratie zullen doen. Loops zoals hieronder (uit de broncode van postgres):

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

kan uiteindelijk worden teruggebracht tot iets als:

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

zoals afgeleid door te kijken naar de assembler die ervoor is gegenereerd:

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

Het probleem verdween na het opnieuw compileren van postgres met die optimalisatie uitgeschakeld door -fno-agressive-loop-optimizations te gebruiken.



  1. Hoe het PostgreSQL-dumpbestand in Postgres-databases te herstellen?

  2. Een logo toevoegen aan een rapportkoptekst in Microsoft Access

  3. MSSQL record datum/tijd automatisch verwijderen

  4. (-) streepje gebruiken in mysql-tabelnaam