On Sun, Mar 25, 2007 at 10:18:14PM -0400, Tom Lane wrote:
> David Fetter <[EMAIL PROTECTED]> writes:
> > I've written up a patch intended to implement this on the
> > non-pg_catalog tables and VIEWs, but while it builds, it doesn't
> > initdb. Enclosed are the patch and the error log.
> > Any hints as to what I might look at?
>
> > creating template1 database in
> > /var/lib/pgsql/pgsql/src/test/regress/./tmp_check/data/base/1 ... ok
> > initializing pg_authid ... ok
> > initializing dependencies ... ok
> > creating system views ... ok
> > loading system objects' descriptions ... FATAL: cache lookup failed for
> > type 11096
> > child process exited with exit code 1
>
> That step of initdb creates a TEMP table ... maybe your patch doesn't
> work for temp tables? Anyway, you're certainly far enough along there
> that you could fire up the postmaster and reproduce the error in a
> normal debugging environment.
I've done that, and thanks to Andrew of Supernews, I've got a slightly
better patch, albeit one that bombs out at the same spot. In the
patch attached, it appears that TypeCreate is not doing the right
thing in pg_depend, either because I'm not invoking it right or
because it needs more machinery.
Any ideas?
Cheers,
David.
--
David Fetter <[EMAIL PROTECTED]> http://fetter.org/
phone: +1 415 235 3778 AIM: dfetter666
Skype: davidfetter
Remember to vote!
Consider donating to PostgreSQL: http://www.postgresql.org/about/donate
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/tablecmds.c,v
retrieving revision 1.218
diff -c -r1.218 tablecmds.c
*** src/backend/commands/tablecmds.c 19 Mar 2007 23:38:29 -0000 1.218
--- src/backend/commands/tablecmds.c 27 Mar 2007 17:59:36 -0000
***************
*** 287,298 ****
Datum reloptions;
ListCell *listptr;
AttrNumber attnum;
/*
! * Truncate relname to appropriate length (probably a waste of time, as
! * parser should have done this already).
*/
! StrNCpy(relname, stmt->relation->relname, NAMEDATALEN);
/*
* Check consistency of arguments
--- 287,310 ----
Datum reloptions;
ListCell *listptr;
AttrNumber attnum;
+ char *relarrayname;
/*
! * Truncate relname to appropriate length (probably a waste of time, as
*
! * parser should have done this already). Because tables and views now
get
! * an array type, this depends on the relkind.
*/
! if (
! namespaceId != 11 && /* pg_catalog's namespace */
! (relkind == 'r' || relkind == 'v')
! )
! {
! StrNCpy(relname, stmt->relation->relname, NAMEDATALEN-2);
! }
! else
! {
! StrNCpy(relname, stmt->relation->relname, NAMEDATALEN);
! }
/*
* Check consistency of arguments
***************
*** 496,501 ****
--- 508,549 ----
*/
relation_close(rel, NoLock);
+ /*
+ * Add the array type if appropriate.
+ */
+ if (
+ namespaceId != 11 && /* pg_catalog's namespace */
+ (relkind == 'r' || relkind == 'v')
+ )
+ {
+ relarrayname = makeArrayTypeName(relname);
+ TypeCreate(relarrayname, /* Array type name */
+ namespaceId, /* Same
namespace as parent */
+ relationId, /* relation
oid, N/A here */
+ 0, /*
relkind, also N/A here */
+ -1, /*
Internal size, unlimited */
+ 'c', /* It's
a complex type */
+ DEFAULT_TYPDELIM, /* Use the default */
+ F_ARRAY_IN, /* Macro for
array input procedure */
+ F_ARRAY_OUT, /* Macro for
array output procedure */
+ F_ARRAY_RECV, /* Macro for
array receive (binary input) procedure */
+ F_ARRAY_SEND, /* Macro for
array send (binary output) procedure */
+ -1, /* No
input typmod */
+ -1, /* No
output typmod */
+ InvalidOid, /* Default
ANALYZE procedure */
+ relationId, /* The OID just
created */
+ InvalidOid, /* No base
type--this isn't a DOMAIN */
+ NULL, /* No
default type value */
+ NULL, /*
Don't send binary */
+ false, /*
Never passed by value */
+ 'd', /* Type
alignment. Should this be something else? */
+ 'x', /*
Always TOASTable */
+ -1, /* No
typMod for regular composite types. When we have domains over these, we should
revisit. */
+ 0, /*
Array diminsions of typbasetype */
+ false); /* Type
NOT NULL */
+ pfree(relarrayname); /* Seems like the right thing to do
here. */
+ }
+
return relationId;
}
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match