2016-04-09 7 views
0

Tablolarda yabancı anahtarlara sahip bir PostgreSQL komut dosyasında çok fazla tablo oluşturuyorum ama dosyalarımı ayarladığım şekilde bir işlem yapmalı ve yabancı anahtarları işlem ama çalışmıyor. Aşağıda, kodumun esas olarak ne olduğuyla ilgili bir örnek var, ancak yine de, kısıtlamalar ertelenmiş olsa bile "secondTable" ın bulunmadığı hatası veriyor.PostgreSQL SET CONSTRAINTS TÜM DEFERRED çalışmıyor

secondTable'ın ilk kez yerleştirilmesi elbette bunu düzeltiyor ancak bunu diğer nedenlerden dolayı gerçek kodum için yapamam. Burada sorun ne olabilir?

START TRANSACTION; 
SET CONSTRAINTS ALL DEFERRED; 
CREATE TABLE firstTABLE(
attribute1 INT NOT NULL references secondTable(attribute3), 
attribute2 INT 
); 
CREATE TABLE secondTable(
attribute3 INT PRIMARY KEY NOT NULL, 
attribute4 varchar(50) 
); 
COMMIT; 

cevap

0

Kodun ve uygulamanın "derlenmesini" karıştırıyorsunuz. Ertelenmiş kısıtlamalar - aslında - bir işlem gerçekleşene kadar kontrol edilmez (veya kısıt tipi değiştirilir). Bununla birlikte, veritabanında kısıtlamanın hala mevcut olması gerekir. Bu bir hatadır - Postgres, yönlendirici tablo bile mevcut olmadığı için kısıtlamayı kaydedemiyor. Başlangıçta, boş olsa bile, tablonun var olmasını istersiniz.