postgreSQL עדכון אוטומטי של sequence (המונה) בעמודת מטייפ SERIAL
-
אני מאפשר למשתמש ליצור רשומה (לייבא למעשה) בטבלה מסויימת עם שליחה של id מראש, במקום לקחת את ההקצאה האוטומטית, (זה רשומות שיש לו נתונים עליהם במערכת קודמת והוא רוצה תאימות, לא שייך לעשות שדה נפרד של id_old)
ויש לי בעיה שבמידה והערך הוא 53 והsequence אוחז שם (או מתחת לזה) הוא לא מתעדכן שיש רשומה חדשה ש"לקחה" לו את הערך ואז כשמנסים להוסיף רשומה "רגילה" שמבקשת הקצאה אוטומטית חוזר שגיאה שערך הid כבר קיים, האם יש דרך להגדיר עדכון אוטומטי למונה?
אני מתכוון מלבד להגדיר טריגר בכל הכנסת רשומה שיעדכן את המונה לערך העליון,
ומלבד הרצה של משהו כמו זה לאחר כל משימת ייבוא,SELECT setval('tPages_id_seq', (SELECT MAX(id) FROM tPages));
-
@dovid אין באמת בעיה, אבל אני מעדיף להגדיר משהו ברמת ההגדרות של הdb/טבלה אם זה אפשרי, אני מבין שלא?
@dovid כתב בpostgreSQL עדכון אוטומטי של sequence (המונה) בעמודת מטייפ SERIAL:
(ה53 זה המחשה חיה? )
כן, בטסטים, יצרתי 5 רשומות עם id ואחת בלי, וכשלחצתי על הייבוא בפעם השניה, כדי לוודא שחוזר שגיאה מתאימה לערכים כפולים קיבלתי שגיאת ערך כפול גם על הרשומה הריקה (שבמקור היתה 52)
-
לפעמים האילוצים של הלקוח/מציאות מוציאים אותנו לגמרי ממסלול המחשבה הישרה.
השאלה ששאלת, עם האפשרויות שדחית (לא לשמור עמודה נוספת ולא לעדכן בסיום)
נראות כמו מישהו ששואל איך הוא יכול לחזור הביתה בלי ללכת ברגל ובלי לעלות על כלי תחבורה - זה חידה מצויינת אבל בשטח אמורים וצריכים להסתדר תמיד עם שני האפשרויות האלו. -
@dovid כתב בpostgreSQL עדכון אוטומטי של sequence (המונה) בעמודת מטייפ SERIAL:
אני חייב (אבל חייב!) לשמוע למה.
כי זה מפחית את הבעיות שעלולות להיווצר אם אני ישכח להגדיר את זה באחת מהשאילתות..
זה מה שאני אעשה בפועל, אבל רציתי לדעת האם יש משהו יותר טוב,זה כמו שאני מעדיף להגדיר טריגר לעדכון של עמודת "עודכן ב.." בכל עדכון של רשומה בטבלאות ספציפיות מאשר לשרשר עם כל שאילתה של עדכון בטבלה הרלוונטית
אני כן שומר עמודה נוספת, אבל היא מיועדת לid ממערכת עוד יותר ישנה של הלקוח, העדפתי שהמזהים יישארו כמו בישן, כי זה חוסך לי לעדכן בייבוא גם את הנתונים שתלויים בנתונים בטבלה הזו למזהה החדש,