Database Research & Development

  • Home
  • NoSQL
    • NoSQL
    • Cassandra
  • Databases
    • Database Theory
    • Database Designing
    • SQL Server Coding Standards
    • SQL Server
    • PostgreSQL
    • MySQL
    • Greenplum
    • Linux
  • Interviews
    • SQL Server Interviews
    • MySQL Interviews
    • SQL Puzzles
  • DBA Scripts
    • SQL Server DBA Scripts
    • PostgreSQL DBA Scripts
    • MySQL DBA Scripts
    • Greenplum DBA Scripts
  • Home
  • Blog Archives !
  • (: Laugh@dbrnd :)
  • Contact Me !
sqlserverinterviews
Home 2017 August PostgreSQL: Don’t Create or Drop Temp Table in LOOP, otherwise will get OID does not exist

PostgreSQL: Don’t Create or Drop Temp Table in LOOP, otherwise will get OID does not exist

This article is half-done without your Comment! *** Please share your thoughts via Comment ***

Anuraag Veerapaneni – He is my work coordinator, and he got “OID does not exist” error in one of the function execution.

Later we found that the problem was in the function code. The temp table was creating and dropping within the WHILE LOOP.

Internally, WHILE LOOP also keeps one session, so the OBJECT ID of dropped temp table still there in the session of WHILE LOOP.
After dropping the temp table, it creates a new temp table in WHILE LOOP with the new object id but dropped temp table object id is still in the session so while selecting a temp table it will search for old Temp table which already dropped.

Our advice: please never write code to create or drop temp tables in the WHILE LOOP.

For better understanding, please visit below demonstration:

Create a test function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE OR REPLACE FUNCTION fn_check_drop_temp_table()
RETURNS integer
AS
$dbrnd$
DECLARE i INT;
j OID;
z OID;
b OID;
a OID;
BEGIN
i:=0;
z:=Coalesce((SELECT relfilenode FROM pg_class
WHERE relname LIKE '%tmp_drop_test%'),111111);
RAISE NOTICE '%','No table found...'|| z;
DROP TABLE IF EXISTS tmp_a;
CREATE TABLE tmp_a (col1 int);
WHILE i<=2
LOOP
j:=coalesce((SELECT relfilenode FROM pg_class
WHERE relname LIKE '%tmp_drop_test%'),1);
RAISE NOTICE '%','1= No data, Other value= OID Data --'|| j;
DROP TABLE IF EXISTS tmp_drop_test; -- Now drop temp table
CREATE temp TABLE tmp_drop_test AS SELECT 1 AS int1; -- Create temp table again with same name
a:=coalesce((SELECT relfilenode FROM pg_class
WHERE relname LIKE '%tmp_drop_test%'),1);
RAISE NOTICE '%','After creating temp table - OID of temp table:'|| a;
INSERT INTO tmp_a
SELECT * FROM tmp_drop_test;
i:=i+1;
END LOOP;
RETURN 1;
END;
$dbrnd$
LANGUAGE PLPGSQL;

Now, execute above function:

1
SELECT *FROM fn_check_drop_temp_table();

Got error in the result:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NOTICE: No table found...111111
NOTICE: 1= No data, Other value= OID Data --1
NOTICE: After creating temp table - OID of temp table:27102093
NOTICE: 1= No data, Other value= OID Data --27102093
NOTICE: After creating temp table - OID of temp table:27102120
ERROR: relation with OID 27102093 does not exist
CONTEXT: SQL statement "INSERT INTO tmp_a SELECT * FROM tmp_drop_test"
PL/pgSQL function "fn_check_drop_temp_table" line 33 at SQL statement

Aug 1, 2017Anvesh Patel
PostgreSQL: Take Schema backup or Copy Schema into another ServerMySQL: Install MySQL Tuner to get Performance Metrice in Ubuntu 16.04

Leave a Reply Cancel reply

CAPTCHA
Refresh

*

Anvesh Patel
Anvesh Patel

Database Engineer

August 1, 2017 PostgreSQLAnvesh Patel, database, database research and development, dbrnd, plpgsql, Postgres Query, postgresql, PostgreSQL Administrator, PostgreSQL Error, PostgreSQL Monitoring, PostgreSQL Performance Tuning, PostgreSQL Programming, PostgreSQL Tips and Tricks, Temp Table, WHILE LOOP
About Me!

I'm Anvesh Patel, a Database Engineer certified by Oracle and IBM. I'm working as a Database Architect, Database Optimizer, Database Administrator, Database Developer. Providing the best articles and solutions for different problems in the best manner through my blogs is my passion. I have more than six years of experience with various RDBMS products like MSSQL Server, PostgreSQL, MySQL, Greenplum and currently learning and doing research on BIGData and NoSQL technology. -- Hyderabad, India.

About DBRND !

dbrnd

This is a personal blog (www.dbrnd.com).

Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.

Feel free to challenge me, disagree with me, or tell me I’m completely nuts in the comments section of each blog entry, but I reserve the right to delete any comment for any reason whatsoever (abusive, profane, rude, or anonymous comments) - so keep it polite.

The content of this website is protected by copyright. No portion of this website may be copied or replicated in any form without the written consent of the website owner.

Recent Comments !
  • Anvesh Patel { Sure will do... } – May 27, 12:43 PM
  • Anvesh Patel { Great... } – May 27, 12:41 PM
  • Anvesh Patel { Great... } – May 27, 12:39 PM
  • Anvesh Patel { Great... } – May 27, 12:36 PM
  • Anvesh Patel { Great... } – May 27, 12:28 PM
  • Anvesh Patel { Great... } – May 27, 12:27 PM
  • Anvesh Patel { Great... } – May 27, 12:16 PM
  • Older »
Follow Me !
  • facebook
  • linkedin
  • twitter
  • youtube
  • google
  • flickr
© 2015 – 2019 All rights reserved. Database Research & Development (dbrnd.com)
Posting....