Difference between revisions of "Postgres Dev."
(→Open Questions) |
m (→Current Efforts) |
||
Line 9: | Line 9: | ||
</pre> | </pre> | ||
− | + | <pre>RelationGetRelationName(relation)</pre> | |
− | + | *Prints out the name of the relation. This function is called directly in the printf of the error message in ri_triggers.c | |
− | |||
− | |||
+ | <pre>RelationGetNamespace</pre> | ||
+ | *There's a member variable: relnamespace in Form_pg_class data type. | ||
+ | It is of type id0, potentially representing a unique namespace identifier. I just replaced the appearance of RelationGetRelationName(relation) with RelationGetNamespace(relation) and am waiting on the test environment to see whether this function returns the id number of the namespace (schema) in our simple example, this should refer to the ''public'' namespace. | ||
− | *Error "violates foreign key constraint: | + | |
+ | *Error "violates foreign key constraint located in: | ||
<pre> | <pre> | ||
postgresql-8.3.7/src/backend/utils/adt/ri_triggers.c: | postgresql-8.3.7/src/backend/utils/adt/ri_triggers.c: |
Revision as of 20:33, 13 April 2009
Postgres Internals Notes
Current Efforts
- Declaration of RelationGetRelationNamespace:
postgresql-8.3.7/src/include/utils/rel.h
RelationGetRelationName(relation)
- Prints out the name of the relation. This function is called directly in the printf of the error message in ri_triggers.c
RelationGetNamespace
- There's a member variable: relnamespace in Form_pg_class data type.
It is of type id0, potentially representing a unique namespace identifier. I just replaced the appearance of RelationGetRelationName(relation) with RelationGetNamespace(relation) and am waiting on the test environment to see whether this function returns the id number of the namespace (schema) in our simple example, this should refer to the public namespace.
- Error "violates foreign key constraint located in:
postgresql-8.3.7/src/backend/utils/adt/ri_triggers.c:
Test Environment
We are currently creating a test environment on db-devel.cs.earlham.edu where a query causes a foreign key constraint. I created a simpler case, with a single relation. When I query
SELECT * FROM (wrong relation name)
An error gets returned, and only the relation name is reported. Our fix plans to address this case, however searching for error messages containing "does not exist" yielded too many result to be useful.
I was able to locate the error messages generated by foreign key constraints. They come from one file, called ri_triggers.c
I am currently creating a test enviroment where we can reproduce this error, and hopefully change the contents of the error message.
Open Questions
- What's the difference between a tablespace and a namespace?
- Is there a way to take a namespace identifier and get a namespace object? It seems like once we can find the namespace lookup function, extracting the name will be trivial.