sql >> Databáze >  >> RDS >> PostgreSQL

initdb:Inicializace pg_authid ... FATAL:špatný počet indexových výrazů

Po kompilaci postgresql 8.1.4 s gcc 4.9.3 jsem narazil na stejný problém.

Problém se zdá být ve způsobu, jakým postgres používá k reprezentaci polí s proměnnou délkou:

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

V některých případech u smyček přistupujících k 'hodnotám' GCC předpokládá, že provedou maximálně jednu iteraci. Smyčky jako ta níže (vytažené ze zdrojového kódu postgresu):

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

může skončit redukován na něco jako:

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

jak vyplývá z pohledu na assembler vygenerovaný pro něj:

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

Problém zmizel po opětovné kompilaci postgresu s deaktivovanou optimalizací pomocí -fno-aggressive-loop-optimizations.



  1. ORA-00913 Chyba při použití velkého množství příkazů IN

  2. Přebudování MySQL 8.0 Replication Slave pomocí klonovacího pluginu

  3. Nepodařilo se upgradovat SonarQube z 4.5.2 na 5.0

  4. zf2 tablegateway vyberte sloupce podle názvu sloupce