2014-08-30 75 views
5

Ben PostgreSql.I'm benim system.My işletim Sistemde PostgreSQL yüklemeye çalışırken yeniyim ifadelerde Ubuntu olduğunu yayınlanmıştır Aşağıda benim hatadırinitdb: başlatılıyor pg_authid ... ÖLÜMCÜL: endeksinin yanlış numara

Veritabanı kümesi, en_US.UTF-8 yerel ayarıyla başlatılacaktır. Varsayılan veritabanı kodlaması buna göre UTF8 olarak ayarlandı.

creating directory p01/pgsql/data ... ok 
creating subdirectories ... ok 
selecting default max_connections ... 100 
selecting default shared_buffers/max_fsm_pages ... 24MB/153600 
creating configuration files ... ok 
creating template1 database in p01/pgsql/data/base/1 ... ok 
initializing pg_authid ... FATAL: wrong number of index expressions 
STATEMENT: CREATE TRIGGER pg_sync_pg_database AFTER INSERT OR UPDATE OR DELETE ON 

pg_database FOR EACH STATEMENT EXECUTE PROCEDURE flatfile_update_trigger(); 

child process exited with exit code 1 
initdb: removing data directory "p01/pgsql/data" 

Yardım edin! Teşekkürler!

+1

bu pg_sync_pg_database ve flatfile_update_trigger şey ne? Paketlerin hangi sürümlerini yüklüyorsunuz ve onlarla başka bir şey var mı? –

+1

Probleminizin çözümünü düşünüyorum (burada) (http://www.postgresql.org/message-id/[email protected]). – Rhim

+0

Burada bir veri eksikliği var. PostgreSQL sürümü? Nasıl yüklediniz - paketleri/kaynağı, nereden? Tam Ubuntu sürümü? * Göndermeden önce ne denediniz? (Link Rhim mesajlarının hata mesajı için ** ikinci google vuruşu ** olduğu göz önüne alındığında)? Bununla birlikte, ilgili günlük çıktısını tam olarak hata mesajı ile yayınladığınız için ve hatta okunabilir şekilde biçimlendirdiğiniz için teşekkürler. –

cevap

3

@Rhim doğru olarak görünüyorsa - you've hit what was assumed to be a compiler bug. Sen yeniden derleyip daha sonra bir argüman olarak CFLAGS="-O1" ile, son gcc paketleri sonra make clean yeniden çalıştırmak configure güncellemek istiyorum ve belki.

BTW, bu PostgreSQL 8.4 derleme veya pg_sync_pg_database gibi eski 9.0 veya daha yeni görünmüyor düşündürmektedir. Ayrıca yeni bir sunucuda derlemeniz gerekir. PostgreSQL 8.4 yakında kullanım ömrü sona erecek ve desteklenmeyeceği için, bu muhtemelen iyi bir fikir değildir.

Ayrıca paketleri kullanmak yerine kendi versiyonunu derledik öneriyor. İyi bir özel nedeniniz olmadıkça, kendi derlemenizi yapmak yerine http://apt.postgresql.org/'u kullanmalısınız. centos 7 için CentOS postgresql (8.2) 5 sürümünü kurarken

3

Ben aynı sorun koştu (3.10.0-229.el7.x86_64.)

Ben çalışmak yapmak mümkün değildi gcc-4.8.3 CFLAGSın = kullanarak "- O1" hile, ama derleyici olarak (3.4.2) tınlamak geçiş (CC = çınlama) benim için çalışma yaptı (ve varsayılan O2 optimizasyon düzeyinde çalıştı.)

4

Ben gcc 4.9.3 ile postgresql 8.1.4 derleme sonra aynı sorunla karşılaştık.

sorun yolu postgres gibi görünüyor değişken uzunlukta diziler temsil etmek kullanır: Bazı durumlarda

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

, 'değerler' erişen döngüler için, GCC onlar en az bir kez yinelenir yapacak varsayar.

: bunun için oluşturulan assembler bakarak ortaya çıkardığın gibi

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

:

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

sonunda olabilir gibi bir şey düşürüldü ediliyor: Aşağıdaki (postgres kaynak kodundan çıkarılan) biri gibi Loops

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

sorun -fno agresif döngü-optimizasyonlar kullanarak devre dışı bıraktığını optimizasyonu ile yeniden derleme Postgres'e sonra gitti.

+0

Postgre'lerin daha yeni sürümleri, değerler [1] yerine, derleyici tarafından destekleniyorsa, [] değerlerini kullanır. –