sql: allow deploying/running in a specific postgresql schema (#50829) #906
Open
fpeters
wants to merge 2 commits from
wip/50829-sql-schema
into main
pull from: wip/50829-sql-schema
merge into: entrouvert:main
entrouvert:main
entrouvert:wip/61870-wscall-parts
entrouvert:wip/80760-wf-form-same-id
entrouvert:wip/26688-datasource-cache-invalidate
entrouvert:wip/90192-move-block-error-after-block
entrouvert:wip/87739-clamav-cli
entrouvert:wip/72793-french-mobile-number-templatetag
entrouvert:wip/86903-fts-cards
entrouvert:wip/71249-application-card-data
entrouvert:wip/17346-condition-log-errors
entrouvert:hotfix/v11.41
entrouvert:wip/90114-backoffice-submission-keep-channel-user-in-draft
entrouvert:wip/44887-backoffice-submission-user-roles
entrouvert:wip/29808-data-source-expire-cache-on-duration-change
entrouvert:wip/47894-get_table_column
entrouvert:wip/60412-dynamic-prefill-select2-card
entrouvert:wip/84136-passage-a-nox
entrouvert:wip/89412-global-interactive-no-live
entrouvert:hotfix/v11.26
entrouvert:wip/75162-do-not-save-prefill-first-visit
entrouvert:wip/81260-workflow-in-progress
entrouvert:hotfix/v11.13
entrouvert:wip/81831-remove-parametric-workflow-variables
entrouvert:wip/88687-update-relations-once-per-model
entrouvert:wip/76958-a11y-live-validation
entrouvert:wip/46617-map-field-jsonb
entrouvert:wip/88208-tests-hobo-provision-clean
entrouvert:wip/4794-mark-vhost-name
entrouvert:wip/87739-clamav
entrouvert:wip/87690-backoffice-builtin-select-filters
entrouvert:hotfix/v10.81
entrouvert:wip/87525-marqueur-position-initiale
entrouvert:wip/36626-html-form-details
entrouvert:wip/87435-submission-index-query
entrouvert:wip/87434-Ameliorer-les-requetes-dans-Subm
entrouvert:wip/xxxxx-lazy-publication-attributes
entrouvert:wip/86992-Condition-de-sortie-de-page-ne-p
entrouvert:wip/28236-age-in-partial-days
entrouvert:wip/83593-testdef-socle-de-base-pour-les-w
entrouvert:wip/86587-testdef-inclure-les-tests-dans-l
entrouvert:hotfix/v10.71
entrouvert:wip/xxx-failing-tests-1
entrouvert:wip/xxx-failing-tests-2
entrouvert:wip/86587-testdef-inclure-les-tests-dans-l-old
entrouvert:wip/86490-opacify-short-url
entrouvert:83593-old-2
entrouvert:hotfix/v10.63
entrouvert:wip/86224-no-godo-for-loops
entrouvert:wip/27992-history-comment-rich
entrouvert:wip/75777-Doublon-d-utilisateur-au-provisi
entrouvert:wip/83593-testdef-socle-de-base-pour-les-w-old
entrouvert:wip/84500-fausse-exception-None-dans-les-t
entrouvert:wip/41460-workflow-zoom-with-ctrl
entrouvert:wip/tests-jenkins
entrouvert:wip/85108-gin-indexes
entrouvert:hotfix/v10.48
entrouvert:wip/84579-jenkinsfile-double-numprocesses
entrouvert:wip/test-ci
entrouvert:wip/78777-template-data-source
entrouvert:wip/81734-rewrite-stats-in-sql
entrouvert:wip/74723-last-jump
entrouvert:wip/66067-admin-permissions-check-all
entrouvert:wip/79738-role-usage
entrouvert:wip/81105-tests-unitaires-js
entrouvert:wip/81496-application-diff-version
entrouvert:wip/77911-decimal-queries
entrouvert:wip/80843-unicite-identifiant
entrouvert:wip/73401-longueur-champ-text
entrouvert:wip/81020-clamp
entrouvert:hotfix/v9.94
entrouvert:wip/80613-visited-objects
entrouvert:wip/80360-form-details-titles
entrouvert:wip/59221-import-none-role
entrouvert:wip/79858-has-role-filter-uuid
entrouvert:wip/79859-liste-image-live-update-champ-ignore
entrouvert:wip/79775-tox-v4-compat
entrouvert:tmp-paul/godo-dependency-riddance
entrouvert:hotfix/v9.68
entrouvert:hotfix/v9.58
entrouvert:wip/72091-remove-python-option
entrouvert:hotfix/v9.36
entrouvert:hotfix/v9.21
entrouvert:wip/75724-live-validation-js
entrouvert:wip/75724-error-template-markup
entrouvert:wip/75724-JS-live-validation
entrouvert:wip/75170-testdef-revoir-la-creation
entrouvert:wip/75795-sql-application_name
entrouvert:wip/75647-cron-ne-pas-bloquer-sur-une-erre
entrouvert:hotfix/v8.98
entrouvert:wip/75178-Retirer-l-application-d-ExifRest
entrouvert:hotfix/v8.90
entrouvert:wip/74840-tox-30
entrouvert:wip/74840-tox-31
entrouvert:wip/73674-sql-cleanup
entrouvert:wip/74435-show-max-file-size-in-error
entrouvert:wip/check-pylint-broad-exception-raised
entrouvert:wip/xxxxx-native-form-pages
entrouvert:wip/73860-enforce-phone-fr-validation
entrouvert:wip/73513-audit-reduce-default-retention-delay
entrouvert:hotfix/v8.68
entrouvert:wip/72989-testdef-gerer-les-pages-conditio
entrouvert:wip/69561-page-title
entrouvert:wip/72704-testdef-verifier-la-validation-d
entrouvert:wip/72802-wf-actions-tracing-table
entrouvert:wip/72860-geojson-missing-id_property
entrouvert:wip/72862-i18n-none-template
entrouvert:wip/70508-missing-edited-data
entrouvert:wip/71789-empty-supported-languages
entrouvert:wip/72859-recreate-formdef-indexes
entrouvert:wip/72857-call-command-close-conn
entrouvert:wip/72682-grep-backoffice-fields
entrouvert:wip/72851-anonymised-tz
entrouvert:wip/38269-adapt-some-category-slugs
entrouvert:wip/72819-myspace-redirect
entrouvert:wip/72815-steps-title
entrouvert:wip/71590-translate-card-digests
entrouvert:wip/61416-cards-fields-directory
entrouvert:wip/72809-stub-data-source
entrouvert:wip/71020-anonymisation-as-trigger-date
entrouvert:wip/72083-add-deprecated-to-python-labels
entrouvert:wip/72803-snapshot-no-changes
entrouvert:wip/72801-jsonvalue-migration-exceptions
entrouvert:wip/71455-move-form-tokens-to-database
entrouvert:wip/72096-datasource-jsondef
entrouvert:wip/72765-phone-number-prefill
entrouvert:wip/31201-redirect-as-endpoint
entrouvert:wip/67090-saml-lier-la-session-en-cours-a-
entrouvert:wip/xxx-track-possible-regression
entrouvert:wip/72623-native-home-anyformdata
entrouvert:wip/71937-add-json-output-in-inspect-tool
entrouvert:hotfix/v8.54
entrouvert:wip/39178-history-message-template
entrouvert:wip/XXX-optimize-condition
entrouvert:wip/71471-fullname-vs-hobo
entrouvert:wip/XXXXX-test-jumps
entrouvert:wip/71330-api-include-workflow-data-param
entrouvert:wip/71333-lazy-evolution-and-old-pickles
entrouvert:wip/71327-redirect-query-string-trailing-slash
entrouvert:wip/71316-redirect-to-correct-category
entrouvert:wip/71303-api-fix-include-evolution
entrouvert:wip/69108-api-formdata-split-full
entrouvert:wip/71252-wscall-deps-conditions
entrouvert:wip/71152-api-export-import-category
entrouvert:wip/71184-preview-redirection
entrouvert:wip/71183-preview-redirection
entrouvert:wip/71183-edit-backoffice-redirection
entrouvert:wip/71176-summary-display-labels-as-p
entrouvert:wip/71102-timetable-a11y-focus-on-week-change
entrouvert:wip/71103-timetable-a11y-keyboard-nav
entrouvert:wip/71101-timetable-a11y-week-nav-buttons
entrouvert:wip/71091-evolution-metadata-p-tag
entrouvert:wip/71118-post-same-slug
entrouvert:wip/71087-filename-p-tag
entrouvert:wip/71051-edit-with-category
entrouvert:wip/70259-import-submission-channel
entrouvert:wip/71038-backoffice-data-admin-url
entrouvert:wip/71034-fullname-template
entrouvert:wip/70952-get-cron-status-no-lock
entrouvert:wip/4281-use-filewidget-in-export-to-model-action
entrouvert:wip/70045-ignore-anonymised-formdata-in-jumps
entrouvert:wip/70639-order-filter-options
entrouvert:wip/70990-restricted-api-user-substvars
entrouvert:wip/70458-create-doc-section
entrouvert:wip/70576-add-action-types-to-deprecation-page
entrouvert:wip/70978-not-set
entrouvert:wip/70979-fix-distance-filter-templatetags
entrouvert:wip/68883-go-to-mail-template
entrouvert:wip/70773-tempfile-link-on-edit-card
entrouvert:wip/70931-api-geojson-no-result
entrouvert:wip/70949-a-in-rich-text
entrouvert:wip/70858-mail-template-category-in-create
entrouvert:wip/70772-fix-json-import-bad-user-format
entrouvert:wip/70644-fix-get-int-or-404
entrouvert:wip/70914-tracing-members
entrouvert:wip/70904-pgpassword
entrouvert:wip/70908-cron-setproctitle
entrouvert:wip/70907-cron-legacy-needed
entrouvert:wip/70906-meta-unique-index
entrouvert:wip/70000-wf-edit-carddata-evolution-bis
entrouvert:wip/70898-missing-card-custom-view-redirect
entrouvert:wip/70702-api-export-import-set-categories
entrouvert:wip/69375-api-export-import-cards-forms-objects-dependencies
entrouvert:wip/69441-api-export-import-wscall-dependencies
entrouvert:wip/62800-formdata-snapshot-bis
entrouvert:wip/70853-remove-static-pages-support
entrouvert:wip/70606-api-export-import-redirect-url
entrouvert:wip/70685-parallel-cron
entrouvert:wip/70587-dedup-sms
entrouvert:wip/70575-add-field-types-to-deprecation-page
entrouvert:wip/69546-redirect-form-to-url-with-category-bis
entrouvert:wip/69546-redirect-form-to-url-with-category
entrouvert:wip/test-formdata-snapshot-show-diffs
entrouvert:wip/67283-L-affectation-d-un-id-inconnu-a-
entrouvert:hotfix/v8.17
entrouvert:wip/xxxxx-responses-as-mock-library
entrouvert:wip/68413-sql-simplify-fields-used-items
entrouvert:wip/68324-custom_view-2
entrouvert:wip/27991-rich-hints
entrouvert:hotfix/v8.4
entrouvert:wip/64499-computed-field-only-cards
entrouvert:wip/67843-itemsfield-with-none-prefill
entrouvert:wip/clean-more-pickle-code
entrouvert:wip/59052-prefill-items
entrouvert:wip/xxxxx-flex-backoffice
entrouvert:wip/xxxxx-api-perfs
entrouvert:hotfix/v7.93
entrouvert:wip/65104-texte-riche-pour-le-message-d-er
entrouvert:wip/xxxxx-transient-data-table
entrouvert:hotfix/v7.87
entrouvert:wip/api-prefetch-users-and-roles
entrouvert:wip/sql-get-listing-item-ids
entrouvert:wip/check-test-admin-pages-sql-mode
entrouvert:wip/64768-fix-dynamic-internal-id-filter
entrouvert:wip/64260-disable-table-fields
entrouvert:misc/id-matching
entrouvert:wip/62760-block-remove-label
entrouvert:wip/62919-block-remove-row
entrouvert:wip/56640-add-informative-pages-into-summary
entrouvert:wip/63038-extend-error-messages-with-examples
entrouvert:wip/62750-a11y-all
entrouvert:hotfix/v7.46
entrouvert:wip/62344-clean-snapshot-models-check-usage
entrouvert:hotfix/v7.42
entrouvert:wip/61728-computed-and-field-position
entrouvert:wip60469-index-gin-for-arrays
entrouvert:wip/60611-fix-computed-field-with-lazylist
entrouvert:wip/58884-agendas-datasource
entrouvert:wip/58208-formulaire-un-autosave-peut-se-t
entrouvert:wip/60025-wscall-allow-empty-parameter-values
entrouvert:wip/59914-do-not-trace-skipped-jumps
entrouvert:wip/xxxxx-do-no-reload-empty-evolution
entrouvert:wip/59683-fix-test
entrouvert:wip/try-to-fix-test
entrouvert:hotfix/v7.17
entrouvert:wip/58632-allow-empty-values-on-create-formdata
entrouvert:wip/43614-move-post-formdata-to-advanced-wscall-options
entrouvert:wip/56802-remove-display-exception-settings
entrouvert:wip/57066-filter-by-on-list-of-dicts
entrouvert:wip/pin-pylint
entrouvert:wip/56205-La-recherche-sur-un-champ-date-e
entrouvert:wip/55494-card-summary-status
entrouvert:wip/pylint-too-many-xxx
entrouvert:hotfix/v6.66
entrouvert:wip/users-in-functions
entrouvert:hotfix/v6.62
entrouvert:hotfix/v6.54
entrouvert:wip/get-roles-translation-refactor-to-list
entrouvert:wip/tests-close-files
entrouvert:hotfix/v6.33
entrouvert:wip/pylint-no-init-hook
entrouvert:wip/pylint-more
entrouvert:hotfix/v6.27
entrouvert:hotfix/v6.18
entrouvert:hotfix/v6.7
entrouvert:wip/jenkins-check-black
entrouvert:hotfix/v5.96
entrouvert:wip/49538-wscall-record-errors-more-more
entrouvert:hotfix/v5.84
entrouvert:hotfix/v5.75
entrouvert:wip/48678-add-items-options-for-radio
entrouvert:hotfix/v5.70
entrouvert:hotfix/v5.51
entrouvert:wip/46617-map-data-as-dictionary
entrouvert:wip/setuptools
entrouvert:wip/admin-tests-split
entrouvert:hotfix/v5.24
entrouvert:hotfix/v5.18
entrouvert:wip/widget-list
entrouvert:wip/transfer-form-value
entrouvert:wip/readonly-validation
entrouvert:hotfix/v5.6
entrouvert:wip/43384-jump-compute-timeout-errors
entrouvert:wip/django-22
entrouvert:hotfix/v4.56
entrouvert:wip/latest-pylint
entrouvert:hotfix/v4.46
entrouvert:wip/alternate-file-storage
entrouvert:hotfix/v4.40
entrouvert:wip/38852-Evaluation-live-des-formulaires-
entrouvert:wip/python3-part2
entrouvert:hotfix/v4.22
entrouvert:wip/36752-fc-attr-verification-bypassed
entrouvert:wip/36037-datasource-notype
entrouvert:hotfix/v4.2
entrouvert:wip/31942-wipe-exclude
entrouvert:wip/checkboxes-tpl
entrouvert:wip/django
entrouvert:wip/future
entrouvert:wip/misc-fred
entrouvert:wip/json-with-files-content
entrouvert:wip/alfortville
entrouvert:debian-squeeze
entrouvert:debian-wheezy
entrouvert:qommon-for-authentic1
entrouvert:v2012.3
No reviewers
Labels
Clear labels
No items
No Label
Milestone
Clear milestone
No items
No Milestone
Assignees
Clear assignees
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/wcs#906
Reference in New Issue
No description provided.
Delete Branch "wip/50829-sql-schema"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
4d73b4426d
to335f86e2ba
335f86e2ba
to63db177bc7
63db177bc7
to2abca6d8e6
2abca6d8e6
tob4ab47df62
WIP: sql: allow deploying/running in a specific postgresql schema (#50829)to sql: allow deploying/running in a specific postgresql schema (#50829)Sur l'idée je suis largement pour, modulo le point que j'ai signalé, et deux problèmes auxiliaires qui sortent du cadre de ce ticket (persistance des connexions PG au sein d'un worker wcs, et incompatibilité du pgbouncer avec le tenant par schemas, mais ça se change/corrige dans les deux cas).
@ -98,0 +99,4 @@
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.connection.set_schema:
self.execute(f'SET search_path = {self.connection.schema}')
Si je comprends bien, cela veut dire qu'à chaque fois qu'on demande un curseur, un appel à
SET search_path
est fait ? Je ne pense pas qu'on veuille que ce soit aussi massif, cela augmenterait la latence de l'application en multipliant les allers-retours avec le PostgreSQL. Ne peut-on pas travailler au niveau d'un middleware wsgi comme dans django ?Oui à chaque fois, parce qu'en regardant ce qui était produit par authentic/combo/etc. c'est ce qu'il me semblait se passer (mais peut-être c'est ma configuration en local qui rate un truc), extrait :
De là j'imaginais les instructions "SET ..." gratuites (surtout que là il y en a chaque fois 2), que c'était une sorte de changement de "mode opératoire" pour les vraies instructions qui suivaient. Si ça n'est pas le cas, et s'il n'y a pas de "truc" pour transmettre en un coup à la fois le SET et la requête, ça va être un peu répétitif mais assez facile, il suffit d'ajouter le schéma à toutes les requêtes et je peux faire les choses ainsi.
Non, on a dépassé ça quand on arrive au moment où le tenant est déterminé.
On a sur le SaaS une configuration particulière pour ne pas appeler set search_path= à chaque curseur:
au niveau de django-tenant-schemas ça pose un booléen sur l'objet connection dès que le schéma est défini pour ne pas répéter mais on devrait bouger ça dans debian_common_config.py.
b4ab47df62
tobf457f01e6
bf457f01e6
to48ce898bbd
J'ai posé un nouveau commit (
48ce898bbd
) pour faire le SET une seule fois par connexion.(prise en compte)