דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך כדאי למספר עמודה משנית בpostgresql?

איך כדאי למספר עמודה משנית בpostgresql?

מתוזמן נעוץ נעול הועבר תכנות
22 פוסטים 5 כותבים 431 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    השיב לnigun ב נערך לאחרונה על ידי OdedDvir
    #4

    @nigun כן. אם הבנתי נכון, אתה רוצה מספר רץ של רשומות עם מנייה נפרדת עבור כל user_id?
    לענ"ד תשתמש בטרנזקציה כדי למנוע כפילויות.
    עיין בשאלה דומה בסטאק: Increment counter based on column match (postgres)

    תגובה 1 תגובה אחרונה
    4
    • nigunN מנותק
      nigunN מנותק
      nigun
      השיב לnigun ב נערך לאחרונה על ידי
      #5
      פוסט זה נמחק!
      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #6

        https://stackoverflow.com/questions/6821871/postgresql-sequence-based-on-another-column

        האפשרות של window function נראית לי טובה יותר מהsequence
        אבל בלי שום קשר לאיך תעשה אתה אמור להיות יכול להשתמש בפרמטרים ולא לחשוב בכלל על "האם יש בעיה של הזרקה" - המחשבה הזאת היא פרצת אבטחה בפני עצמה.
        אין לי מושג מה הקליינט שלך (מנחש שGO) הוא חייב לתמוך בפרמטרים ובטוקניזציה בטוחה.

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        nigunN תגובה 1 תגובה אחרונה
        3
        • nigunN מנותק
          nigunN מנותק
          nigun
          השיב לdovid ב נערך לאחרונה על ידי
          #7

          @dovid אמר באיך כדאי למספר עמודה משנית בpostgresql?:

          אתה אמור להיות יכול להשתמש בפרמטרים ולא לחשוב בכלל על "האם יש בעיה של הזרקה"

          מה הכוונה פרמטרים?
          $1 במקום שרשור של הסטרינג?

          OdedDvirO תגובה 1 תגובה אחרונה
          0
          • OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            השיב לnigun ב נערך לאחרונה על ידי OdedDvir
            #8

            @nigun כשהקליינט שלך מבצע קריאה לשאילתא בבסיס נתונים, הקריאה אמורה לתמוך בהעברת פרמטרים לשאילתא, ולבצע בדיקה של הפרמטרים כדי למנוע SQL-Injection, בצד הקליינט. אף פעם לא עושים Execute של משפט SQL שמורכב משרשור ישיר של קלט הלקוח.

            nigunN תגובה 1 תגובה אחרונה
            1
            • nigunN מנותק
              nigunN מנותק
              nigun
              השיב לOdedDvir ב נערך לאחרונה על ידי nigun
              #9

              @odeddvir
              ניסיתי לעשות
              "CREATE SEQUENCE IF NOT EXISTS sequence$1 OWNED BY my_tabel.sub_id ;"
              ולא עבד
              זה לא אמור להיות פרמטר

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לnigun ב נערך לאחרונה על ידי
                #10

                @nigun אם השתמשת ב window_function כפי שהציע @dovid אתה בכלל לא צריך Sequence, וזה הרבה יותר פשוט. ראית שם את התשובה השניה? שיניתי אותה למקרה שלך:

                INSERT INTO YourTable
                    (user, sub_id, DATA)
                    SELECT user, ROW_NUMBER() OVER(PARTITION BY user ORDER BY DATA), DATA
                        FROM YourSource
                
                nigunN תגובה 1 תגובה אחרונה
                3
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  כתב ב נערך לאחרונה על ידי yossiz
                  #11

                  זו אותה שאלה שאני שאלתי בעבר?
                  https://tchumim.com/post/111656

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  OdedDvirO תגובה 1 תגובה אחרונה
                  3
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    השיב לyossiz ב נערך לאחרונה על ידי OdedDvir
                    #12

                    @yossiz אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                    זו אותה שאלה שאני שאלתי בעבר?

                    כך זה נראה. אמנם פונקציית חלון לא הייתה קיימת בגרסאות 9.5 ומטה, כך שאיני יודע אם בזמן השאלה היה קיים הפתרון הנ"ל.

                    yossizY תגובה 1 תגובה אחרונה
                    0
                    • yossizY מנותק
                      yossizY מנותק
                      yossiz
                      השיב לOdedDvir ב נערך לאחרונה על ידי
                      #13

                      @odeddvir אני עובר על הפוסטים שם, וא) אני מבין שהיום אני מבין פחות ב-DB-ים ממה שהבנתי אז... ב) אני רואה שיצא לי שגם אם עושים את הכל במשפט SQL אחת זה לא פותר את בעיית ההתנגשויות, כך שאני לא בטוח שפונקציית חלון יעזור פה.

                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                      תגובה 1 תגובה אחרונה
                      3
                      • nigunN מנותק
                        nigunN מנותק
                        nigun
                        השיב לOdedDvir ב נערך לאחרונה על ידי nigun
                        #14

                        @odeddvir
                        ראיתי שם את התשובה השניה והתחלתי לשחק עם השאילתות לראות איך זה עובד.
                        סתם נסחפתי לנושא של הפרמטרים.
                        את הרעיון של sequence קיבלתי מהמדריך הזה
                        שמסביר איך הסוג עמודה SERIAL עובד

                        CREATE SEQUENCE table_name_id_seq;
                        
                        CREATE TABLE table_name (
                            id integer NOT NULL DEFAULT nextval('table_name_id_seq')
                        );
                        
                        ALTER SEQUENCE table_name_id_seq
                        OWNED BY table_name.id;
                        

                        חשבתי שהסיבה שבחרו בדרך הזאת זה כנראה בגלל יעילות
                        אז למה שאני לא יעשה ככה גם.

                        עכשיו אני מנסה להבין מה ROW_NUMBER() עושה מאחורי הקלעים ונראה האם זה יעיל או סתם נועל את כל הטבלה ללא צורך?
                        ובמה זה שונה משאילתת MAX?

                        dovidD תגובה 1 תגובה אחרונה
                        0
                        • dovidD מנותק
                          dovidD מנותק
                          dovid ניהול
                          השיב לnigun ב נערך לאחרונה על ידי
                          #15

                          אני פתאום חושב שwindow function לא עוזר כלום למקביליות,
                          בעוד הsequence עשוי עבור זה.

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          yossizY תגובה 1 תגובה אחרונה
                          3
                          • yossizY מנותק
                            yossizY מנותק
                            yossiz
                            השיב לdovid ב נערך לאחרונה על ידי yossiz
                            #16

                            @dovid אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                            אני פתאום חושב

                            זה מה שטענתי למעלה...

                            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                            מנצפךמ תגובה 1 תגובה אחרונה
                            2
                            • מנצפךמ מנותק
                              מנצפךמ מנותק
                              מנצפך
                              השיב לyossiz ב נערך לאחרונה על ידי
                              #17

                              ליתר בטחון תעשה כלל uniqe על 2 העמודות הללו ביחד.
                              ואז לא יהיה מצב של כפילות. מקסימום אתה מריץ כמה פעמים את השאילתה (לדעתי זה הפתרון הכי קל, להריץ בלולאה עם כמה ניסיונות- attempts).

                              (אגב, אני לא מצליח להיזכר בדיוק, אבל יש מנגנון דומה בעוד מקומות של התנגשות, אולי של התנגשות בגישה לרשומת ב DB או סתם מערכת קבצים, ואז כל תהליך מנסה להמתין זמן רנדומלי, וכו, לא זוכר את הסוף)

                              yossizY nigunN 2 תגובות תגובה אחרונה
                              1
                              • yossizY מנותק
                                yossizY מנותק
                                yossiz
                                השיב למנצפך ב נערך לאחרונה על ידי
                                #18

                                @מנצפך אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                                (אגב, אני לא מצליח להיזכר בדיוק, אבל יש מנגנון דומה בעוד מקומות של התנגשות, אולי של התנגשות בגישה לרשומת ב DB או סתם מערכת קבצים, ואז כל תהליך מנסה להמתין זמן רנדומלי, וכו, לא זוכר את הסוף)

                                אולי https://en.wikipedia.org/wiki/Exponential_backoff?

                                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                תגובה 1 תגובה אחרונה
                                0
                                • nigunN מנותק
                                  nigunN מנותק
                                  nigun
                                  השיב למנצפך ב נערך לאחרונה על ידי
                                  #19

                                  @מנצפך אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                                  ליתר בטחון תעשה כלל uniqe על 2 העמודות הללו ביחד.

                                  אני רוצה שיהיה יוניק רק ביחס לעמודה השניה, לא ביחס לכל הטבלה.
                                  וכן אני רוצה שיהיה אפשרות לשנות את המספור בשעת הצורך

                                  yossizY תגובה 1 תגובה אחרונה
                                  0
                                  • yossizY מנותק
                                    yossizY מנותק
                                    yossiz
                                    השיב לnigun ב נערך לאחרונה על ידי yossiz
                                    #20

                                    @nigun אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                                    אני רוצה שיהיה יוניק רק ביחס לעמודה השניה, לא ביחס לכל הטבלה.

                                    @מנצפך אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                                    תעשה כלל uniqe על 2 העמודות הללו ביחד

                                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                    nigunN תגובה 1 תגובה אחרונה
                                    0
                                    • nigunN מנותק
                                      nigunN מנותק
                                      nigun
                                      השיב לyossiz ב נערך לאחרונה על ידי
                                      #21

                                      @yossiz אמר באיך כדאי למספר עמודה משנית בpostgresql?:

                                      תעשה כלל uniqe על 2 העמודות הללו ביחד

                                      באר
                                      לא הבנתי מה זה אומר

                                      OdedDvirO תגובה 1 תגובה אחרונה
                                      0
                                      • OdedDvirO מנותק
                                        OdedDvirO מנותק
                                        OdedDvir
                                        השיב לnigun ב נערך לאחרונה על ידי
                                        #22

                                        @nigun אני חושב שהוא התכוון למפתח מרוכב Composite-Key

                                        תגובה 1 תגובה אחרונה
                                        2

                                        • 1
                                        • 2
                                        בא תתחבר לדף היומי!
                                        • התחברות

                                        • אין לך חשבון עדיין? הרשמה

                                        • התחברו או הירשמו כדי לחפש.
                                        • פוסט ראשון
                                          פוסט אחרון
                                        0
                                        • דף הבית
                                        • קטגוריות
                                        • פוסטים אחרונים
                                        • משתמשים
                                        • חיפוש
                                        • חוקי הפורום