2010-09-30 15 views
5

Ubuntu 10.04 ile PostgreSQL 8.4.4 çalıştırıyorum.Ubuntu 10.04 üzerinde PostgreSQL 8.4.4 ile uuid nasıl oluşturulur?

Uuid oluşturmaya çalışıyorum ama bunu yapmanın bir yolunu bulamıyorum.

postgres=# SELECT uuid_generate_v1(); 
ERROR: function uuid_generate_v1() does not exist 
LINE 1: SELECT uuid_generate_v1(); 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

konusunda fikrin: Bu bana seni mi çalıştığınızda

Ben

/usr/share/postgresql/8.4/contrib/uuid-ossp.sql yılında uuid-ossp.sql var?

cevap

12

contrib'daki öğeler otomatik olarak çalıştırılmaz. Fonksiyonları kurmak için kendiniz çalıştırmanız gerekiyor. Ben 8.4 sürümü hakkında bilmiyorum, ama 8.3 sürümünde sadece veritabanı başına yüklemek için görünür, bu yüzden psql içinde kullandığınız veritabanını açın ve \i /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

+0

Teşekkür ederiz. İşe yaradı. Bilmek güzel! – Spredzy

+0

Evet, veritabanı başına. Bu veritabanını şablon olarak kullanan her yeni veritabanının (bu varsayılan değerdir) emin olmak için, tüm katkı modülleri de dahil olmak üzere oluşturulduğundan emin olmak için, template1 veritabanındaki her şeyi kurabilirsiniz. –

+0

Postgresql'in (9.0+, sanırım) mevcut sürümleri için, katkıda bulunan modüller uzantı olarak paketlenmiştir. Uzantılar, sürümlenebilir, adlandırılmış ve kaldırılmış oldukları için temizdir. Örneğin, uuid işlevlerini "uuid" şemasına aşağıdaki komutu kullanarak yükleyebilirsiniz: "uuid-ossp schema uuid uzantısını oluşturun". Sonra "uuid.uuid_generate_v4()" gibi işlevlere erişirsiniz. –

1

'u gördüm. PostgreSQL seyahat ediyor. Pgcrypto katkı modülünü gerektirir.

CREATE OR REPLACE FUNCTION generate_uuid() RETURNS UUID AS 
$$ 
SELECT ENCODE(GEN_RANDOM_BYTES(16), 'hex')::UUID 
$$ LANGUAGE SQL IMMUTABLE; 
+1

arkada olanlar için sınıfının, gerçekten de/contrib yüklü bir şeyler yüklemek için bir sudo apt-get install postgresql-contrib yapın. @paul teşekkürler. –

+5

İşlevleri, işlev değerlendirmeleri yerine önbelleğe almak istemediğinizden, işlevi "IMMUTABLE" olarak bildirmemelisiniz. Fonksiyonun her çağrıldığında çalıştırıldığından emin olmak için fonksiyonunuzu "VOLATILE" olarak bildirin. Daha fazla açıklama için http://www.postgresql.org/docs/8.3/interactive/xfunc-volatility.html adresini ziyaret edin. –

+0

Bu işlevi yürüttüğümde bunu alıyorum: HATA: yinelenen anahtar değeri benzersiz bir kısıtlamayı ihlal ediyor "relation_pkey" DETAIL: Anahtar (id) = (5a0cd072-6463-2cb0-9de9-42aabb85f270) zaten var. Yukarıda belirtildiği gibi VOLATILE olarak değiştirilmesi sorunu çözer. –

İlgili konular