[Python] Concatenazione lato DB => Rebus
Daniele Varrazzo
piro a develer.com
Mer 21 Mar 2012 16:35:35 CET
On Wed, 21 Mar 2012 16:09:21 +0100, Simone Federici wrote:
> cmq tornando al problema che è tuttaltro che risolto,
> ci sono le FK che sono nullable :-)
> quindi il problema mi si ripresenta da dietro l'angolo
>
> CREATE TABLE sample_chapter
> (
> b_name character varying(100) NOT NULL,
> b_author character varying(100),
Dipende da cosa definisci per "chiave". Io ho definito una mia tabella
così:
create table other (
id serial primary key,
name varchar(100),
author varchar(100),
constraint fkey_book foreign key (name, author)
references book (name, author));
prova ad inserire un solo record ('a', 'b') nella tua tabella book, e
poi:
test=> insert into other (name, author) values ('a', 'b');
INSERT 0 1
fino a qui tutto bene.
test=> insert into other (name, author) values ('c', 'd');
ERROR: insert or update on table "other" violates foreign key
constraint "fkey_book"
fino a qui tutto bene.
insert into other (name, author) values ('c', null);
e ora che dovrebbe fare il db? 'c' non esiste, ma ('c', null) non può
esistere. Ma c'è il null: questo porta il record al di fuori del
dominio, quindi non c'è alcun tentativo di rinforzare la chiave. Così,
forse sorprendentemente, forse no, questo insert funziona.
INSERT 0 1
Il problema è quello che ti ho detto nella prima riga della prima
risposta: ('c', null) non è una chiave. Sono solo due valori buttati in
due campi.
Detto questo, il problema di serializzare una coppia generica non è
difficile. Giusto per darti più corda con la quale impiccarti...
test=> create table pairs (a text, b text);
CREATE TABLE
test=> insert into pairs values ('a', 'b');
INSERT 0 1
test=> insert into pairs values ('a', '');
INSERT 0 1
test=> insert into pairs values ('a', null);
INSERT 0 1
test=> select coalesce(quote_literal(a), '') || '_' ||
coalesce(quote_literal(b), '') from pairs;
?column?
----------
'a'_'b'
'a'_''
'a'_
(3 rows)
Solo, non dire che sono fkey: sono la serializzazione di due valori
generici.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python