मैं आज इस समस्या में भाग गया और दृश्य को छोड़ने और पुनर्निर्माण से बचने के लिए चारों ओर एक काम पाया। मैं सिर्फ अपना दृश्य नहीं छोड़ सकता क्योंकि यह एक मास्टर व्यू है जिसमें इसके ऊपर बनाए गए कई निर्भर दृश्य हैं। ड्रॉप कैस्केड में पुनर्निर्माण स्क्रिप्ट होने के बाद और फिर मेरे सभी दृश्यों को फिर से बनाएं, यह एक काम है।
मैं अपमानजनक कॉलम के लिए डमी मान का उपयोग करने के लिए अपने मास्टर दृश्य को बदलता हूं, तालिका में कॉलम बदलता हूं, और मेरे दृश्य को वापस कॉलम पर स्विच करता हूं। इस तरह एक सेटअप का उपयोग करना: आप एक डमी मान का उपयोग करने master_view बदलते हैं तो
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view master_view depends on column "base_table_field1"
:
ALTER TABLE base_table ALTER COLUMN base_table_field1 TYPE numeric(10,6);
में आपको यह त्रुटि होगा:
CREATE TABLE base_table
(
base_table_id integer,
base_table_field1 numeric(10,4)
);
CREATE OR REPLACE VIEW master_view AS
SELECT
base_table_id AS id,
(base_table_field1 * .01)::numeric AS field1
FROM base_table;
CREATE OR REPLACE VIEW dependent_view AS
SELECT
id AS dependent_id,
field1 AS dependent_field1
FROM master_view;
इस तरह base_table_field1 प्रकार बदलने के लिए कोशिश कर रहा है इस तरह के कॉलम के लिए:
CREATE OR REPLACE VIEW master_view AS
SELECT
base_table_id AS id,
0.9999 AS field1
FROM base_table;
फिर अपने बदलने चलाएँ:
ALTER TABLE base_table ALTER COLUMN base_table_field1 TYPE numeric(10,6);
और आपके विचार वापस स्विच:
CREATE OR REPLACE VIEW master_view AS
SELECT
base_table_id AS id,
(base_table_field1 * .01)::numeric AS field1
FROM base_table;
यह सब पर निर्भर करता है कि क्या आपका master_view एक स्पष्ट प्रकार है कि परिवर्तन नहीं करता है। चूंकि मेरा VIEW '(base_table_field1 * .01) :: numeric AS field1' का उपयोग करता है, लेकिन यह 'base_table_field1 AS field1' नहीं होगा क्योंकि कॉलम प्रकार बदलता है। यह दृष्टिकोण मेरे जैसे कुछ मामलों में मदद कर सकता है।
दृश्य क्वेरी की प्रतिलिपि बनाएँ और इसे हटाएं और तालिका – TaherT