CREATE UNIQUE INDEX SI n'EXISTE PAS dans postgreSQL
S'il vous plait je voudrais faire dans PostgreSQL quelque chose comme
CREATE UNIQUE INDEX IF NOT EXISTS
Une idée?
- Cela est possible depuis Postgres 9.5: postgresql.org/docs/9.5/static/sql-createindex.html
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier, si un index avec un nom donné par la présente déclaration.
Si votre nom d'index est
some_table_some_field_idx
À partir de Postgres 9.5 vous pouvez même utiliser
Juste un autre prêt à utiliser la solution.
PostgreSQL v9.0+:
PostgreSQL v9.5+:
J'ai enveloppé a_horse_with_no_name code avec PLSQL fonction pour une utilisation plus pratique. J'espère que quelqu'un va la trouver utile.
utilisation:
sélectionnez create_index('ma_table', 'my_index_name', 'id');
Vous avez besoin d'un code de procédure pour ce faire, quelque chose comme ça (non testé!):
create index if not exists ...
(si il y avait une telle syntaxe) ne serait pas vérifier que ce soit.create index [aa] on bb(cc,dd) WHERE NOT EXISTS ( select ... FROM catalogs xx WHERE (something with {bb,cc,dd} ) );
Et il y a toujours le problème possible avec unique/non-unique indices partage le même {bb,cc,dd} valeurs. Et index-méthodes...Si vous êtes toujours bloqué dans les versions précédentes, je vous recommande de ne pas utiliser le comte, mais juste la requête directement dans votre si la condition. Rend le code plus simple. Vous pouvez essayer quelque chose comme ceci:
Une autre solution qui prennent en charge plusieurs colonnes d'index, basé sur @Kragh réponse
et puis vous pouvez l'utiliser comme n'importe quel autre pg fonction:
select create_index('events_timestamp_type_idx', 'events', 'timestamp', 'type');