Advertisement
Guest User

cache lookup failed for type 0

a guest
Mar 28th, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP SCHEMA IF EXISTS a CASCADE;
  2. CREATE SCHEMA a;
  3.  
  4. DROP SCHEMA IF EXISTS b CASCADE;
  5. CREATE SCHEMA b;
  6.  
  7. -- Create the culprit, in a separate schema
  8. CREATE TYPE a.my_enum AS ENUM (
  9.   'option1',
  10.   'option2'
  11. );
  12.  
  13. CREATE TABLE b.whatever (
  14.   some_int INT,
  15.   something a.my_enum,
  16.   some_text TEXT
  17. ) PARTITION BY LIST (something);
  18.  
  19. CREATE TABLE b.whatever_1 PARTITION OF b.whatever FOR VALUES IN ('option1');
  20. CREATE TABLE b.whatever_2 PARTITION OF b.whatever FOR VALUES IN ('option2');
  21.  
  22. -- No more schema, no more enum, no more partition key
  23. DROP SCHEMA a CASCADE;
  24.  
  25. -- Nnope!
  26. DROP SCHEMA b CASCADE;
  27.  
  28. -- Maybe this?
  29. DROP TABLE b.whatever_1 CASCADE;
  30. DROP TABLE b.whatever_2 CASCADE;
  31. -- it worked. Final touch?
  32. DROP TABLE b.whatever CASCADE;
  33. -- Nope.
  34.  
  35. -- What's going on?
  36. SELECT * FROM pg_attribute
  37. WHERE
  38.   attrelid IN (SELECT c.oid FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relname LIKE 'whatever%' AND n.nspname='b')
  39.   AND attnum>0;
  40.  
  41. --Bad solution
  42. UPDATE pg_attribute
  43. SET atttypid='int'::REGTYPE::INT
  44. WHERE
  45.   attrelid IN (
  46.     SELECT
  47.       c.oid
  48.     FROM pg_class c
  49.     JOIN pg_namespace n
  50.       ON n.oid = c.relnamespace
  51.     WHERE
  52.       c.relname LIKE 'whatever%'
  53.       AND n.nspname='b'
  54.   )
  55.   AND attnum>0
  56.   AND atttypid=0
  57.   AND attlen=4;
  58.  
  59. -- Works now
  60. DROP SCHEMA b CASCADE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement