Hi Tom,

Thanks for your responses this morning. I did the select relname, and it returned 0 rows. I do have one function that creates a temp table and fills it within the same transaction. I'm pasting it below. Perhaps the "ON COMMIT DROP" is causing problems, and I need to drop the table at the end of the function instead of using ON COMMIT DROP?

--
-- Name: crumbs(integer, text, boolean); Type: FUNCTION; Schema: public
--

CREATE FUNCTION crumbs(integer, text, boolean) RETURNS text
    AS $_$DECLARE

        starting_page ALIAS FOR $1;
        
        current_page integer;
        
        delimiter text DEFAULT ': ';
        
        withLinkTags BOOLEAN DEFAULT FALSE;
        
        page_id_temp INTEGER;
        
        page_name_temp TEXT;
        
        current_nOrder INTEGER := 1;
        
        page_results record;
        
        path TEXT DEFAULT '';
        
BEGIN

        IF starting_page IS NULL
        THEN
                RETURN NULL;
        END IF;

        current_page := starting_page;
        
        IF $2 IS NOT NULL
        THEN
                delimiter := $2;
        END IF;
        
        IF $3 IS NOT NULL
        THEN
                withLinkTags := $3;
        END IF;
        
        --Create a table consisting of three columns: nOrder, page_id, name
        
        CREATE TEMPORARY TABLE results
        (nOrder integer,
        page_id integer,
        name text)
        ON COMMIT DROP;

        --Select the current page into the results table
        
        SELECT INTO
                page_id_temp,
                page_name_temp
                
                p.page_id,
                CASE WHEN p.title_abbr IS NOT NULL
                        THEN p.title_abbr
                        ELSE p.title
                END as name
                
        FROM page p
                
        WHERE p.page_id = starting_page;
        
        IF FOUND
        THEN
                EXECUTE 'INSERT INTO results (nOrder, page_id, name)
                VALUES ('       || current_nOrder || ','
                                        || page_id_temp || ','
                                        || quote_literal(page_name_temp)
                || ')';
        
                current_nOrder := current_nOrder + 1;
        END IF;
        
        --Loop through results for page parents
        
        LOOP
        
                SELECT INTO
                        page_id_temp,
                        page_name_temp

parent.page_id as parent_id,
CASE WHEN parent.title_abbr IS NOT NULL
THEN parent.title_abbr
ELSE parent.title
END as name

FROM page AS child

INNER JOIN page AS parent
ON child.subcat_id = parent.page_id

WHERE child.page_id = current_page;

IF FOUND
THEN

EXECUTE 'INSERT INTO results (nOrder, page_id, name)
VALUES (' || current_nOrder || ','
|| page_id_temp || ','
|| quote_literal(page_name_temp)
|| ')';

current_page = page_id_temp;

current_nOrder := current_nOrder + 1;

ELSE

EXIT;

END IF;

END LOOP;


SELECT INTO
page_id_temp,
page_name_temp

c.default_page as parent_id,
c.name

FROM page p

INNER JOIN category c
ON c.cat_id = p.cat_id

WHERE page_id = starting_page;

IF FOUND
THEN

EXECUTE 'INSERT INTO results (nOrder, page_id, name)
VALUES (' || current_nOrder || ','
|| page_id_temp || ','
|| quote_literal(page_name_temp)
|| ')';

END IF;

FOR page_results IN EXECUTE 'SELECT * FROM results ORDER BY nOrder DESC' LOOP

IF path = ''
THEN
IF withLinkTags IS TRUE
THEN
path := '<a href="index.php?pid=' || page_results.page_id || '">';
path := path || page_results.name;
path := path || '</a>';
ELSE
path := page_results.name;
END IF;
ELSE
IF withLinkTags IS TRUE
THEN
path := path || delimiter;
path := path || '<a href="index.php?pid=' || page_results.page_id || '">';
path := path || page_results.name;
path := path || '</a>';
ELSE
path := path || delimiter || page_results.name;
END IF;
END IF;

END LOOP;

RETURN path;


END;$_$
    LANGUAGE plpgsql;
On Apr 23, 2005, at 11:17 AM, Tom Lane wrote:

Richard Plotkin <[EMAIL PROTECTED]> writes:
/usr/local/pgsql/data/base/17234/42791
/usr/local/pgsql/data/base/17234/42791.1
/usr/local/pgsql/data/base/17234/42791.2
/usr/local/pgsql/data/base/17234/42791.3
...

Well, that is certainly a table or index of some kind.

Go into database 17234 --- if you are not certain which one that is, see
select datname from pg_database where oid = 17234
and do
select relname from pg_class where relfilenode = 42791


The only way I could see for this to not find the table is if the table
creation has not been committed yet.  Do you have any apps that create
and fill a table in a single transaction?

                        regards, tom lane



---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to