PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
104 stars 102 forks source link

Migration 2.11.0 vers 2.13.0 #2810

Closed naidinp closed 11 months ago

naidinp commented 11 months ago

Bonjour à tous,

Je suis en train de tester la mise à jour vers de la version 2.11 vers la 2.13. Tout se passe correctement jusqu'à la mise à jour de BD ou je rencontre une erreur avec une violation des contraintes.

Voici les logs de sortie :

merci pour votre aide.

Rebuild du frontend terminé.
Mise à jour de la base de données…
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Context impl PostgresqlImpl.
Will assume transactional DDL.
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade 2984569d5df6 -> 85efc9bb5a47, declare permissions
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade cce08a64eb4f -> 87705981de5e, insert occtax sample data
Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
    self.dialect.do_execute(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 608, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.CheckViolation: ERREUR:  la nouvelle ligne de la relation « cor_acquisition_framework_actor » viole la contrainte de vérification « check_is_actor_in_cor_acquisition_framework_actor »
DETAIL:  La ligne en échec contient (70, 65, null, null, 359).

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/bin/geonature", line 8, in <module>
    sys.exit(main())
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/cli.py", line 357, in decorator
    return __ctx.invoke(f, *args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla/commands.py", line 100, in autoupgrade
    flask_migrate.upgrade(directory, revision, sql, tag, x_arg)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_migrate/__init__.py", line 111, in wrapped
    f(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_migrate/__init__.py", line 200, in upgrade
    command.upgrade(config, revision, sql=sql, tag=tag)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/command.py", line 385, in upgrade
    script.run_env()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/script/base.py", line 578, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 93, in load_python_file
    module = load_module_py(module_id, path)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 109, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/home/geonatureadmin/geonature/backend/geonature/migrations/env.py", line 88, in <module>
    run_migrations_online()
  File "/home/geonatureadmin/geonature/backend/geonature/migrations/env.py", line 82, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/runtime/environment.py", line 927, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/runtime/migration.py", line 626, in run_migrations
    step.migration_fn(**kw)
  File "/home/geonatureadmin/geonature/contrib/occtax/backend/occtax/migrations/87705981de5e_occtax_samples_with_id_module.py", line 39, in upgrade
    op.execute(operations)
  File "<string>", line 8, in execute
  File "<string>", line 3, in execute
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/operations/ops.py", line 2540, in execute
    return operations.invoke(op)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/operations/base.py", line 395, in invoke
    return fn(self, operation)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/operations/toimpl.py", line 221, in execute_sql
    operations.migration_context.impl.execute(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/ddl/impl.py", line 202, in execute
    self._exec(sql, execution_options)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/alembic/ddl/impl.py", line 193, in _exec
    return conn.execute(  # type: ignore[call-overload]
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
    return meth(self, multiparams, params)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1124, in _execute_clauseelement
    ret = self._execute_context(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1316, in _execute_context
    self._handle_dbapi_exception(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1510, in _handle_dbapi_exception
    util.raise_(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
    raise exception
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
    self.dialect.do_execute(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 608, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.CheckViolation) ERREUR:  la nouvelle ligne de la relation « cor_acquisition_framework_actor » viole la contrainte de vérification « check_is_actor_in_cor_acquisition_framework_actor »
DETAIL:  La ligne en échec contient (70, 65, null, null, 359).

[SQL: SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = pr_occtax, pg_catalog, public;

---------
--DATAS--
---------

-- Insérer un cadre d'acquisition d'exemple

INSERT INTO gn_meta.t_acquisition_frameworks (
    unique_acquisition_framework_id,
    acquisition_framework_name,
    acquisition_framework_desc,
    id_nomenclature_territorial_level,
    territory_desc,
    keywords,
    id_nomenclature_financing_type,
    target_description,
    ecologic_or_geologic_target,
    acquisition_framework_parent_id,
    is_parent,
    acquisition_framework_start_date,
    acquisition_framework_end_date,
    meta_create_date,
    meta_update_date
    ) VALUES (
    '57b7d0f2-4183-4b7b-8f08-6e105d476dc5',
    'Données d''observation de la faune, de la Flore et de la fonge du Parc national des Ecrins',
    'Données d''observation de la faune, de la Flore et de la fonge du Parc national des Ecrins',
    ref_nomenclatures.get_id_nomenclature('NIVEAU_TERRITORIAL', '4'),
    'Territoire du Parc national des Ecrins correspondant au massif alpin des Ecrins',
    'Ecrins, parc national, faune, flore, fonge',
    ref_nomenclatures.get_id_nomenclature('TYPE_FINANCEMENT', '1'),
    'Tous les taxons',
    null,
    null,
    false,
    '1973-03-27',
    null,
    '2018-09-01 10:35:08',
    null
    )
;

-- Insérer 2 jeux de données d'exemple
INSERT INTO gn_meta.t_datasets (
    unique_dataset_id,
    id_acquisition_framework,
    dataset_name,
    dataset_shortname,
    dataset_desc,
    id_nomenclature_data_type,
    keywords,
    marine_domain,
    terrestrial_domain,
    id_nomenclature_dataset_objectif,
    bbox_west,
    bbox_east,
    bbox_south,
    bbox_north,
    id_nomenclature_collecting_method,
    id_nomenclature_data_origin,
    id_nomenclature_source_status,
    id_nomenclature_resource_type,
    active,
    validable,
    meta_create_date,
    meta_update_date
    )
    VALUES
    (
    '4d331cae-65e4-4948-b0b2-a11bc5bb46c2',
     (SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5'),
    'Contact aléatoire tous règnes confondus',
    'Contact aléatoire',
    'Observations aléatoires de la faune, de la flore ou de la fonge',
    ref_nomenclatures.get_id_nomenclature('DATA_TYP', '1'),
    'Aléatoire, hors protocole, faune, flore, fonge',
    false,
    true,
    ref_nomenclatures.get_id_nomenclature('JDD_OBJECTIFS', '1.1'),
    4.85695,
    6.85654,
    44.5020,
    45.25,
    ref_nomenclatures.get_id_nomenclature('METHO_RECUEIL', '1'),
    ref_nomenclatures.get_id_nomenclature('DS_PUBLIQUE', 'Pu'),
    ref_nomenclatures.get_id_nomenclature('STATUT_SOURCE', 'Te'),
    ref_nomenclatures.get_id_nomenclature('RESOURCE_TYP', '1'),
    true,
    true,
    '2018-09-01 16:57:44.45879',
    null
    ),
    (
    'dadab32d-5f9e-4dba-aa1f-c06487d536e8',
    (SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5'),
    'ATBI de la réserve intégrale du Lauvitel dans le Parc national des Ecrins',
    'ATBI Lauvitel',
    'Inventaire biologique généralisé sur la réserve du Lauvitel',
    ref_nomenclatures.get_id_nomenclature('DATA_TYP', '1'),
    'Aléatoire, ATBI, biodiversité, faune, flore, fonge',
    false,
    true,
    ref_nomenclatures.get_id_nomenclature('JDD_OBJECTIFS', '1.1'),
    4.85695,
    6.85654,
    44.5020,
    45.25,
    ref_nomenclatures.get_id_nomenclature('METHO_RECUEIL', '1'),
    ref_nomenclatures.get_id_nomenclature('DS_PUBLIQUE', 'Pu'),
    ref_nomenclatures.get_id_nomenclature('STATUT_SOURCE', 'Te'),
    ref_nomenclatures.get_id_nomenclature('RESOURCE_TYP', '1'),
    true,
    true,
    '2018-09-01 16:59:03.25687',
    null
    )
;

-- Renseigner les tables de correspondance
INSERT INTO gn_meta.cor_acquisition_framework_voletsinp (id_acquisition_framework, id_nomenclature_voletsinp) VALUES
((SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5')
,ref_nomenclatures.get_id_nomenclature('VOLET_SINP', '1'))
;

INSERT INTO gn_meta.cor_acquisition_framework_objectif (id_acquisition_framework, id_nomenclature_objectif) VALUES
((SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5')
, ref_nomenclatures.get_id_nomenclature('CA_OBJECTIFS', '8'))
;

INSERT INTO gn_meta.cor_acquisition_framework_actor (id_acquisition_framework, id_role, id_organism, id_nomenclature_actor_role) VALUES
(
    (SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '1')
),(
    (SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '6')
),(
    (SELECT id_acquisition_framework FROM gn_meta.t_acquisition_frameworks WHERE unique_acquisition_framework_id='57b7d0f2-4183-4b7b-8f08-6e105d476dc5'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '8')
);

INSERT INTO gn_meta.cor_dataset_actor (id_dataset, id_role, id_organism, id_nomenclature_actor_role) VALUES
(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '1')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '6')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    (SELECT id_role FROM utilisateurs.t_roles WHERE identifiant='partenaire'),
    NULL,
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '8')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '1')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'ma structure test'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '6')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    (SELECT id_role FROM utilisateurs.t_roles WHERE identifiant='partenaire'),
    NULL,
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '8')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    (SELECT id_role FROM utilisateurs.t_roles WHERE identifiant='agent'),
    NULL,
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '5')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'Autre'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '6')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    NULL,
    (SELECT id_organisme FROM utilisateurs.bib_organismes WHERE nom_organisme = 'Autre'),
    ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR', '6')
);

INSERT INTO gn_meta.cor_dataset_territory (id_dataset, id_nomenclature_territory, territory_desc) VALUES
(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    ref_nomenclatures.get_id_nomenclature('TERRITOIRE', 'METROP'),
    'Territoire du parc national des Ecrins et de ses environs immédiats'
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    ref_nomenclatures.get_id_nomenclature('TERRITOIRE', 'METROP'),
    'Réserve intégrale de lauvitel'
);

INSERT INTO gn_meta.cor_dataset_protocol (id_dataset, id_protocol) VALUES
(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
    (SELECT id_protocol FROM gn_meta.sinp_datatype_protocols WHERE protocol_name='hors protocole')
),(
    (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='dadab32d-5f9e-4dba-aa1f-c06487d536e8'),
    (SELECT id_protocol FROM gn_meta.sinp_datatype_protocols WHERE protocol_name='hors protocole')
);

INSERT INTO gn_commons.cor_module_dataset (id_module, id_dataset)
SELECT gn_commons.get_id_module_bycode('OCCTAX'), id_dataset
FROM gn_meta.t_datasets t
JOIN gn_meta.t_acquisition_frameworks af on t.id_acquisition_framework = af.id_acquisition_framework
WHERE active and af.unique_acquisition_framework_id = '57b7d0f2-4183-4b7b-8f08-6e105d476dc5';

-- Insérer 2 relevés d'exemple dans Occtax

INSERT INTO pr_occtax.t_releves_occtax (
  unique_id_sinp_grp,
  id_dataset,
  id_digitiser,
  id_nomenclature_tech_collect_campanule,
  id_nomenclature_grp_typ,
  id_nomenclature_geo_object_nature,
  date_min,
  date_max,
  hour_min,
  hour_max,
  altitude_min,
  altitude_max,
  meta_device_entry,
  comment,
  geom_local,
  geom_4326,
  precision,
  id_module
  ) VALUES (
      '4f784326-2511-11ec-9fdd-23b0fb947058',
      (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
      (SELECT id_role from utilisateurs.t_roles WHERE identifiant='admin'),
      ref_nomenclatures.get_id_nomenclature('TECHNIQUE_OBS', '133'),
      ref_nomenclatures.get_id_nomenclature('TYP_GRP','OBS'),
      ref_nomenclatures.get_id_nomenclature('NAT_OBJ_GEO','In'), -- ?
      '2017-01-01',
      '2017-01-01',
      '12:05:02',
      '12:05:02',
      1500,
      1565,
      'web',
      'Exemple test',
      '01010000206A0800002E988D737BCC2D41ECFA38A659805841',
      '0101000020E61000000000000000001A40CDCCCCCCCC6C4640',
      10,
      gn_commons.get_id_module_bycode('OCCTAX')
),(
      '4fa06f7c-2511-11ec-93a1-eb4838107091',
      (SELECT id_dataset FROM gn_meta.t_datasets WHERE unique_dataset_id='4d331cae-65e4-4948-b0b2-a11bc5bb46c2'),
      1,
      ref_nomenclatures.get_id_nomenclature('TECHNIQUE_OBS', '133'),
      ref_nomenclatures.get_id_nomenclature('TYP_GRP', 'OBS'),
      ref_nomenclatures.get_id_nomenclature('NAT_OBJ_GEO','In'), -- ?
      '2017-01-08',
      '2017-01-08',
      '20:00:00',
      '23:00:00',
      1600,
      1600,
      'web',
      'Autre exemple test',
      '01010000206A0800002E988D737BCC2D41ECFA38A659805841',
      '0101000020E61000000000000000001A40CDCCCCCCCC6C4640',
      100,
      gn_commons.get_id_module_bycode('OCCTAX')
  );

-- Insérer 3 occurrences dans les 2 relevés Occtax

INSERT INTO pr_occtax.t_occurrences_occtax  (
    unique_id_occurence_occtax,
    id_releve_occtax,
    id_nomenclature_obs_technique,
    id_nomenclature_bio_condition,
    id_nomenclature_bio_status,
    id_nomenclature_naturalness,
    id_nomenclature_exist_proof,
    id_nomenclature_observation_status,
    id_nomenclature_blurring,
    determiner,
    id_nomenclature_determination_method,
    cd_nom,
    nom_cite,
    meta_v_taxref,
    sample_number_proof,
    digital_proof,
    non_digital_proof,
    comment
  )
VALUES
  (
    'f303683c-2510-11ec-b93a-67b44043fe7d',
    (SELECT id_releve_occtax FROM pr_occtax.t_releves_occtax WHERE unique_id_sinp_grp='4f784326-2511-11ec-9fdd-23b0fb947058'),
    ref_nomenclatures.get_id_nomenclature('METH_OBS', '23'),
    ref_nomenclatures.get_id_nomenclature('ETA_BIO', '1'),
    ref_nomenclatures.get_id_nomenclature('STATUT_BIO', '1'),
    ref_nomenclatures.get_id_nomenclature('NATURALITE', '1'),
    ref_nomenclatures.get_id_nomenclature('PREUVE_EXIST', '0'),
    --ref_nomenclatures.get_id_nomenclature('NIV_PRECIS', '0'),
    ref_nomenclatures.get_id_nomenclature('STATUT_OBS', 'Pr'),
    ref_nomenclatures.get_id_nomenclature('DEE_FLOU', 'NON'),
    'Gil',
    ref_nomenclatures.get_id_nomenclature('METH_DETERMIN', '2'),
    60612,
    'Lynx Boréal',
    'Taxref V11.0',
    '',
    '',
    'Poil',
    'Test'
  ),
  (
    'fb106f34-2510-11ec-a3ff-6fb52354595c',
    (SELECT id_releve_occtax FROM pr_occtax.t_releves_occtax WHERE unique_id_sinp_grp='4f784326-2511-11ec-9fdd-23b0fb947058'),
    ref_nomenclatures.get_id_nomenclature('METH_OBS', '23'),
    ref_nomenclatures.get_id_nomenclature('ETA_BIO', '1'),
    ref_nomenclatures.get_id_nomenclature('STATUT_BIO', '1') ,
    ref_nomenclatures.get_id_nomenclature('NATURALITE', '1'),
    ref_nomenclatures.get_id_nomenclature('PREUVE_EXIST', '0'),
    --ref_nomenclatures.get_id_nomenclature('NIV_PRECIS', '0'),
    ref_nomenclatures.get_id_nomenclature('STATUT_OBS', 'Pr'),
    ref_nomenclatures.get_id_nomenclature('DEE_FLOU', 'NON'),
    'Théo',
    ref_nomenclatures.get_id_nomenclature('METH_DETERMIN', '2'),
    351,
    'Grenouille rousse',
    'Taxref V11.0',
    '',
    '',
    'Poils de plumes',
    'Autre test'
  ),
  (
    'fcdf2c24-2510-11ec-9995-fb27008e2817',
    (SELECT id_releve_occtax FROM pr_occtax.t_releves_occtax WHERE unique_id_sinp_grp='4fa06f7c-2511-11ec-93a1-eb4838107091'),
    ref_nomenclatures.get_id_nomenclature('METH_OBS', '23'),
    ref_nomenclatures.get_id_nomenclature('ETA_BIO', '1'),
    ref_nomenclatures.get_id_nomenclature('STATUT_BIO', '1'),
    ref_nomenclatures.get_id_nomenclature('NATURALITE', '1'),
    ref_nomenclatures.get_id_nomenclature('PREUVE_EXIST', '0'),
    --ref_nomenclatures.get_id_nomenclature('NIV_PRECIS', '0'),
    ref_nomenclatures.get_id_nomenclature('STATUT_OBS', 'Pr'),
    ref_nomenclatures.get_id_nomenclature('DEE_FLOU', 'NON'),
  'Donovan',
  ref_nomenclatures.get_id_nomenclature('METH_DETERMIN', '2'),
  67111,
  'Ablette',
  'Taxref V11.0',
  '',
  '',
  'Poils de plumes',
  'Troisieme test'
  );

-- Insérer 1 observateur pour chacun des 2 relevés Occtax

INSERT INTO pr_occtax.cor_role_releves_occtax (id_releve_occtax, id_role) VALUES
(
    (SELECT id_releve_occtax FROM pr_occtax.t_releves_occtax WHERE unique_id_sinp_grp='4f784326-2511-11ec-9fdd-23b0fb947058'),
    (SELECT id_role from utilisateurs.t_roles WHERE identifiant='admin')
),(
    (SELECT id_releve_occtax FROM pr_occtax.t_releves_occtax WHERE unique_id_sinp_grp='4fa06f7c-2511-11ec-93a1-eb4838107091'),
    (SELECT id_role from utilisateurs.t_roles WHERE identifiant='admin')
);

-- Insérer 3 dénombrements dans les 3 occurrences

INSERT INTO  pr_occtax.cor_counting_occtax (
  id_occurrence_occtax,
  id_nomenclature_life_stage,
  id_nomenclature_sex,
  id_nomenclature_obj_count,
  id_nomenclature_type_count,
  count_min,
  count_max
  )
  VALUES
  (
    (SELECT id_occurrence_occtax FROM pr_occtax.t_occurrences_occtax WHERE unique_id_occurence_occtax='f303683c-2510-11ec-b93a-67b44043fe7d'),
    ref_nomenclatures.get_id_nomenclature('STADE_VIE', '2') ,
    ref_nomenclatures.get_id_nomenclature('SEXE', '2') ,
    ref_nomenclatures.get_id_nomenclature('OBJ_DENBR', 'IND'),
    ref_nomenclatures.get_id_nomenclature('TYP_DENBR', 'Co'),
    5,
    5
  ),
  (
    (SELECT id_occurrence_occtax FROM pr_occtax.t_occurrences_occtax WHERE unique_id_occurence_occtax='fb106f34-2510-11ec-a3ff-6fb52354595c'),
    ref_nomenclatures.get_id_nomenclature('STADE_VIE', '4') ,
    ref_nomenclatures.get_id_nomenclature('SEXE', '2'),
    ref_nomenclatures.get_id_nomenclature('OBJ_DENBR', 'IND'),
    ref_nomenclatures.get_id_nomenclature('TYP_DENBR', 'Co'),
    1,
    1
  ),
  (
    (SELECT id_occurrence_occtax FROM pr_occtax.t_occurrences_occtax WHERE unique_id_occurence_occtax='fcdf2c24-2510-11ec-9995-fb27008e2817'),
    ref_nomenclatures.get_id_nomenclature('STADE_VIE', '3') ,
    ref_nomenclatures.get_id_nomenclature('SEXE', '2'),
    ref_nomenclatures.get_id_nomenclature('OBJ_DENBR', 'IND'),
    ref_nomenclatures.get_id_nomenclature('TYP_DENBR', 'Co'),
    1,
    1
  )
;
]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
geonatureadmin@geonat-dev:~/geonature/install/migration$
camillemonchicourt commented 11 months ago

OK, donc on voit que l'erreur arrive au moment d'une migration de la BDD : Running upgrade cce08a64eb4f -> 87705981de5e, insert occtax sample data.

Cette migration est dans ce fichier : https://github.com/PnX-SI/GeoNature/pull/2277/files#diff-2d2896a2526559b42042ab36d8242d8e9793c9469bbfe0a72614394832e42a35

Elle est dans la branche "sample_data" donc n'est exécutée que si on a activé les données d'exemple lors de l'installation initiale de GeoNature.

Et elle vérifie si on n'a pas le cadre d'acquisition ayant l'UUID 57b7d0f2-4183-4b7b-8f08-6e105d476dc5, alors on lance l'insertion des données d'exemple du module Occtax : https://github.com/PnX-SI/GeoNature/blob/master/contrib/occtax/backend/occtax/migrations/data/sample_data.sql


Dans votre cas, vous aviez certainement installé GeoNature avec les données d'exemple par défaut, mais vous aviez depuis supprimé le cadre d'acquisition ajouté par défaut ('57b7d0f2-4183-4b7b-8f08-6e105d476dc5', 'Données d''observation de la faune, de la Flore et de la fonge du Parc national des Ecrins'). Donc il a relancé l'intégration de toutes les données d'exemple de base d'Occtax, et il a bloqué au moment d'associer les acteurs aux CA et JDD (certainement car vous avez aussi supprimé les organismes fournis par défaut) : https://github.com/PnX-SI/GeoNature/blob/master/contrib/occtax/backend/occtax/migrations/data/sample_data.sql#L139


Donc vous avez bien fait de faire du ménage dans les données par défaut, et c'est nous qui ne devrions pas essayé de les réintégrer une nouvelle fois. On va voir comme on peut améliorer/rectifier ça pour les prochaines versions.

Mais pour vous débloquer et que les migrations ne tentent pas de remettre toutes les valeurs par défaut, vous pouvez indiquer à votre GeoNature que vous avez déjà passé la migration "87705981de5e" :

source ~/geonature/backend/venv/bin/activate
geonature db stamp 87705981de5e
deactivate

Puis relancer la mise à jour.

naidinp commented 11 months ago

Merci pour cette réponse rapide. Effectivement j'ai compris que l'erreur faisait référence à des données du Parc National des Ecrins....mais je savais pas comment éviter ce passage de réintégration des données par le script de migration.

Je valide les le workaround

source ~/geonature/backend/venv/bin/activate
geonature db stamp 87705981de5e
deactivate

...pour que la migration continue sans erreur ; je suis maintenant passé à 2.13.0 en suivant la doc du site https://docs.geonature.fr/installation.html (Mise à jour de l’application)