slevinkelevra Δημοσ. 12 Ιανουαρίου 2018 Δημοσ. 12 Ιανουαρίου 2018 (επεξεργασμένο) Καλησπέρα, Λοιπόν, έχω ξαναρωτήσει για all-in-one query, αλλα τώρα την βοήθεια σας για σχετικά με την PL/pgSQL. Έχω ενα query που ο χρήστης μπορεί να αναζητήσει Constructions απο οποιονδηποτε μη-σταθερο συνδυασμό απο category style, event area. Αυτα ειναι σε διαφορετικα tables και οχι στον ιδιο. Οκ, στη θεωρια δεν μπορουμε να εχουμε ενα "απλο" query γιατι θα εχουμε πολλα if πολλα joins θα ειναι δυσκολο στη συντηρηση ο planner περναει στην cache τον πρωτο συνδυασμο parameters και ο επομενος μπορει να ειναι διαφορετικος, οποτε θα είναι πιο αργο το query για να αποφυγω το παραπανω μπορω να κανω recompile το query καθε φορα, που και παλι το κανει πιο αργο Μπραβο, το εμαθα το μαθημα. Για να αποφυγουμε τα παραπανω, μπορουμε να χρησιμοποιήσουμε dynamic SQL: λιγοτερα ifs, καλυτερη συντηρηση, recompile δε χρειαζεται, αφου ο planner αποθηκευει ενα query plan για καθε περιπτωση. Χαιρομαι. Παμε στην PostgreSQL. Για να γραψεις dynamic sql θα μπορουσες να χρησιμοπιησεις την PL/pgSQL, η οποια ομως (απο το documentation της) "to generate dynamic commands inside your PL/pgSQL functions, that is, commands that will involve different tables or different data types each time they are executed. PL/pgSQL's normal attempts to cache plans for commands will not work in such scenarios. To handle this sort of problem, the EXECUTE statement is provided. Also, there is no plan caching for commands executed via EXECUTE. Instead, the command is always planned each time the statement is run. If multiple rows are returned, only the first will be assigned to the INTO variable." απο και επισης "SQL commands that appear directly in a PL/pgSQL function must refer to the same tables and columns on every execution; that is, you cannot use a parameter as the name of a table or column in an SQL command. To get around this restriction, you can construct dynamic commands using the PL/pgSQL EXECUTE statement — at the price of performing new parse analysis and constructing a new execution plan on every execution." απο αρα η PL/pgSQL δεν μου κανει, μιας και εχω διαφορετικους tables 2 ερωτηματα η PL/pgSQL οντως δεν μου κανει ή κατι μου διαφεύγει σχετικα με αυτην? δεν βρισκω tutorial με dynamic sql για postgreSQL, μονο αυτό , το οποίο ο κωδικας του προφανως, μου δινει errors. Λιγη βοηθεια ρε παιδια... Ευχαριστω Επεξ/σία 12 Ιανουαρίου 2018 από slevinkelevra
defacer Δημοσ. 12 Ιανουαρίου 2018 Δημοσ. 12 Ιανουαρίου 2018 Νομίζω πως έχεις βαριά περίπτωση XY problem εδώ. Κάνε εκατό βήματα πίσω και δες α) ποιό feature θέλεις να παρέχεις και β) τι ακριβώς σε εμποδίζει. Θέλεις να παρέχεις "γενικό search" και σε εμποδίζουν οι κακές επιδόσεις; Ίσως είναι πρέπον να σταματήσεις να χρησιμοποιείς ένα εργαλείο που δεν είναι φτιαγμένο για γενικό search και να βάλεις κάτι πιο κατάλληλο (ES).
slevinkelevra Δημοσ. 12 Ιανουαρίου 2018 Μέλος Δημοσ. 12 Ιανουαρίου 2018 Thanks Εσυ, σα τελικος χρηστης εχεις 4 dropdown (category, style, event, area), μπορεις να επιλεξεις ή μονο ενα ή συνδυασμο τους. Γι αυτο νομιζω, χωρις να ειμαι σιγουρος, οτι το ES ειναι λιγο overkill. Οπως και να εχει θα το τσεκαρω κ αυτο. Δεν με εμποδιζει τιποτα στη πραξη. Γιατι δεν εχω κατι στη πραξη. Προσπαθω να κανω μια ερευνα για να ξερω τι θα χρησιμοποιησω. Ψαχνωντας ειδα οτι να εισαι χυμαδιο και να κανεις join σε μη-σταθερο συνδυασμο εχει τα θεματα του. Απλα μου κανουν εντυπωση οι περιορισμοι της PL/pgSQL's γιατι νομιζα οτι αυτα ακριβως λυνει. Anyway, θα συνεχισω να το ψαχνω και ελπιζω μεχρι το τελος της δεκαετιας να εχω καταληξει...
defacer Δημοσ. 12 Ιανουαρίου 2018 Δημοσ. 12 Ιανουαρίου 2018 Μια συμβουλή: μη ξεκινάς από το τεχνολογικό άκρο, μπορεί να παρασυρθείς και να χάσεις χρόνο κυνηγώντας χείμαιρες. Ξεκίνα από το χρήστη του ό,τι συζητάμε δες αυτός ο χρήστης (όχι εγώ) τι θέλει και τι περιμένει, και με αυτή την αφετηρία ξεκίνα ανάλογα. YAGNI. Κυριολεκτικά pro tip.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα