PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ड्रॉप कॉलम कॉलम संदर्भों को पूरी तरह से नहीं हटाता है - postgresql

pg_attribute के साथ कभी भी खिलवाड़ न करें सीधे। यदि आपने ऐसा किया है, तो संभवत:बैकअप से पुनर्स्थापित करने का समय आ गया है।

जब कोई कॉलम गिरा दिया जाता है, तो PostgreSQL वास्तव में उसे हटाता नहीं है, लेकिन नाम बदलता है और इसे गिरा हुआ के रूप में चिह्नित करता है।

CREATE TABLE testtab (
   id integer PRIMARY KEY,
   dropme text NOT NULL,
   val text NOT NULL
);

ALTER TABLE testtab DROP dropme;

SELECT attname, attnum, attisdropped
FROM pg_attribute
WHERE attrelid = 'testtab'::regclass
   AND attnum > 0
ORDER BY attnum;

┌──────────────────────────────┬────────┬──────────────┐
│           attname            │ attnum │ attisdropped │
├──────────────────────────────┼────────┼──────────────┤
│ id                           │      1 │ f            │
│ ........pg.dropped.2........ │      2 │ t            │
│ val                          │      3 │ f            │
└──────────────────────────────┴────────┴──────────────┘
(3 rows)

तो मुझे लगता है कि गिरा हुआ कॉलम अभी भी कॉलम की सीमा में गिना जाता है।

मैं एक के बारे में सोच सकता हूं, जो बहुत सहज नहीं है, इससे छुटकारा पाने का तरीका:

BEGIN;
CREATE TABLE testtab_2 (LIKE testtab INCLUDING ALL);
INSERT INTO testtab_2 SELECT * FROM testtab;
DROP TABLE testtab;
ALTER TABLE testtab_2 RENAME TO testtab;
COMMIT;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे PostgreSQL का उपयोग कर तालिका नाम से स्तंभ विशेषताएँ क्वेरी प्राप्त करने के लिए?

  2. त्रुटि कैसे ठीक करें:कॉलम c.relhasoids Postgres में मौजूद नहीं है?

  3. कॉलम सूचीबद्ध किए बिना, प्रत्येक कॉलम पर समान एकत्रीकरण कैसे करें?

  4. मैं एक नई स्थापना के बाद Postgresql में कैसे लॉगिन और प्रमाणित करूं?

  5. Postgresql कॉलम नहीं मिला, लेकिन वर्णन में दिखाता है