PDA

View Full Version : [SQL]Postgresql 9. Problema Inserimento Tabella per foreign Key


master1995
15-05-2012, 15:12
Ho la seguenti tabelle

CREATE TABLE libro
(
id integer NOT NULL,
titolo character varying(128) NOT NULL,
codice_isbn character varying(64) NOT NULL,
costo double precision NOT NULL,
data_pubblicazione date NOT NULL,
CONSTRAINT pk_libro PRIMARY KEY (id),
CONSTRAINT fk_autore FOREIGN KEY (id)
REFERENCES autore (id_libro) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_prestito FOREIGN KEY (id)
REFERENCES prestito (id_libro) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE libro OWNER TO postgres;


CREATE TABLE prestito
(
id bigint NOT NULL,
inizio_prestito date NOT NULL,
fine_prestito date NOT NULL,
ammenda double precision DEFAULT 0,
id_utente bigint NOT NULL,
id_libro bigint NOT NULL,
CONSTRAINT pk_prestito PRIMARY KEY (id),
CONSTRAINT ucq_cliente UNIQUE (id_utente),
CONSTRAINT ucq_libro UNIQUE (id_libro)
)
WITH (
OIDS=FALSE
);
ALTER TABLE prestito OWNER TO postgres;


Devo inserire un elemento solo in Libro. Come posso disabilitare temporaneamente il vincolo di foreign Key tra la tabella libro e prestito? Mi potreste scrivere del codice, se esiste, per risolvere il problema

gokan
16-05-2012, 13:34
Dovresti eliminare la foreign key.
Prova usando qualcosa di simile (non provata) :
ALTER TABLE libro DROP CONSTRAINT fk_autore

Ovvio che poi sei costretto a ricrearla se vuoi ripristinare il vincolo:
ALTER TABLE libro ADD CONSTRAINT fk_autore FOREIGN KEY (id) REFERENCES prestito (id_libro) MATCH SIMPLE;


Non č una cosa molto bella, eliminare e ricreare una foreign_key di questo tipo.
Al posto tuo, eliminerei tale vincolo, o se proprio vuoi un comportamento simile, puņ provare ad usare i trigger.
Con postgres vi sono comandi sql che permettono di disabilitare ed abilitare un trigger a piacimento.

link:http://www.postgresql.org/docs/8.1/static/sql-altertable.html