שיעורי מודול (3/4)
שינוי המבנה: ALTER TABLE
הצרכים של אפליקציה משתנים עם הזמן, ומסד הנתונים חייב לעמוד בקצב. ALTER TABLE היא הפקודה (הרב-תכליתית) המוקדשת לשינוי סכימות טבלה קיימות מבלי צורך לבטל אותן (לסכן את הנתונים בפנים).
שינוי עמודות (ADD / DROP / ALTER)
הוספת עמודה דורשת טיפול. אם הטבלה כבר מכילה נתונים, הוספת עמודה "NOT NULL" תגרום לשגיאה ב-Postgres: מה היא צריכה להכניס בשורות הישנות? עליך לשייך DEFAULT.
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque
-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;
-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;לא רק הוספה או הסרה: לעתים קרובות אתה צריך להגדיר מחדש את ה-type של עמודה או את אחד מהאילוצים שלה:
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);
-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;
-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;הוספת אילוצים בזמן ריצה
בדיוק כמו עם CREATE TABLE, אנו יכולים להשתמש ב-ALTER TABLE כדי לצרף CONSTRAINT לטבלה שכבר נמצאת בשימוש באפליקציית הייצור.
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);
-- Aggiungi un CHECK
ALTER TABLE products
ADD CONSTRAINT price_positive CHECK (price > 0);
-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;שינוי שם
ניתן לשנות את שמות העמודות והטבלאות:
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;נסה את זה
בטבלה 'מוצרים' יש כרגע עמודה 'שם'. שנה את הטבלה על ידי שינוי שם העמודה 'שם' ל'כותרת'. השתמש בפעולת RENAME COLUMN.
הצג רמז
תחביר: ALTER TABLE ... שנה שם עמודה ... ל ...
הפתרון זמין לאחר 3 ניסיונות
הוספת אילוצים בפוסט-פרודקשן
שנה את טבלת 'מוצרים' על-ידי הוספת אילוץ CHECK (ששמו 'verifica_prezzo') המחייב את המחיר (העמודה 'מחיר') להיות גדול מ-0. יש להוסיף את האילוץ מבלי להפיל את העמודה המקורית.
הצג רמז
תחביר: טבלת ALTER TABLE הוסף שם אילוץ בדוק (...)
הפתרון זמין לאחר 3 ניסיונות