I have some code that generates the following log entries (annotated
with #).
The code takes place inside a transaction.
A record is inserted. Then I get the of the newly inserted record, then
I explicitly
select that record (this is just to illustrate the problem). Then
another insert is attempted
and fails because of a constraint that requires one of the values
entered to be an existing value
in another table. But we have just verified that that value exists in
the other table!
# successful insert
Topic Create (0.001205) INSERT INTO topics ("inlibrary",
"irx_display_title", "irx_title", "title",
"creation_stamp",
"last_update_stamp", "url", "mime_type",
"irx_doc_path", "dr_title",
"irx_machine_id", "source", "keywords")
VALUES(''t'', NULL, ''d gdssg sd5
gd5g '', NULL, ''2006-03-29 11:13:42'',
''2006-03-29 11:13:42'', NULL, NULL,
''/irx/xml/DGdssgSd5Gd5g.xml'', ''dgbtev sgdg
d'', ''DGdssgSd5Gd5g'', NULL,
NULL)
SQL (0.000440) SELECT currval(''inforx.topics_id_seq'')
# output of a logger.info statement spitting out the id of the newly
inserted topic
HERE IS THE TOPIC ID: 3126
# i explicitly select the topic:
Topic Load (0.000649) SELECT * FROM topics WHERE (topics.id = 3126)
LIMIT 1
# and print out a logger statement showing that the topic exists:
topic exists
TopicSubtopic Create (0.000000) PGError: ERROR: insert or update on
table "topic_subtopic" violates foreign key constraint
"fk_topic_subtopic_subtopic_1"
DETAIL: Key (child_topic_key)=(3126) is not present in table "topics".
: INSERT INTO topic_subtopic ("child_topic_key",
"topic_key",
"display_header") VALUES(3126, 2, ''Medications'')
The constraint on topic_subtopic is:
ALTER TABLE ONLY topic_subtopic
ADD CONSTRAINT fk_topic_subtopic_subtopic_1 FOREIGN KEY
(child_topic_key) REFERENCES topics(id) ON UPDATE NO ACTION ON DELETE NO
ACTION;
We already know there is an ID of 3126 in topics....why did the code
seem to forget it exists?
Remember this all takes place within the same transaction.
--
Posted via http://www.ruby-forum.com/.