web-dev-qa-db-fra.com

L'extension existe mais uuid_generate_v4 échoue

Sur Amazon ec2 RDS Postgresql:

=> SHOW rds.extensions;

rds.extensions                                                                                                                                 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 btree_gin,btree_Gist,chkpass,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_trgm,plperl,plpgsql,pltcl,postgis,postgis_tiger_geocoder,postgis_topology,sslinfo,tablefunc,tsearch2,unaccent,uuid-ossp
(1 row)

Comme vous pouvez le constater, l’extension uuid-ossp existe. Cependant, lorsque j'appelle la fonction pour la génération uuid_v4, elle échoue:

CREATE TABLE my_table (
    id uuid DEFAULT uuid_generate_v4() NOT NULL,
    name character varying(32) NOT NULL,

);

Quel est le problème avec cela?

30
アレックス

L'extension est disponible mais pas installé dans cette base de données.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
77
Craig Ringer

Si l'extension existe déjà mais que la fonction uuid_generate_v4 () ne s'affiche pas lorsque vous décrivez une fonction\ df, il vous suffira alors de supprimer l'extension et de l'ajouter de nouveau. que les fonctions sont également ajoutées. Voici la réplication du problème:

db=# \df
                       List of functions
 Schema | Name | Result data type | Argument data types | Type
--------+------+------------------+---------------------+------
(0 rows)
CREATE EXTENSION "uuid-ossp";
ERROR:  extension "uuid-ossp" already exists
DROP EXTENSION "uuid-ossp";
CREATE EXTENSION "uuid-ossp";
db=# \df
                                  List of functions
 Schema |        Name        | Result data type |    Argument data types    |  Type
--------+--------------------+------------------+---------------------------+--------
 public | uuid_generate_v1   | uuid             |                           | normal
 public | uuid_generate_v1mc | uuid             |                           | normal
 public | uuid_generate_v3   | uuid             | namespace uuid, name text | normal
 public | uuid_generate_v4   | uuid             |                           | normal

db=# select uuid_generate_v4();
           uuid_generate_v4
--------------------------------------
 b19d597c-8f54-41ba-ba73-02299c1adf92
(1 row)

Ce qui est probablement arrivé, c’est que l’extension a été ajoutée au cluster à un moment donné dans le passé et que vous avez ensuite probablement créé une nouvelle base de données au sein de ce cluster. Si tel était le cas, la nouvelle base de données ne sera que "consciente" de l'extension, mais les fonctions uuid ne seront pas ajoutées, ce qui se produit lorsque vous ajoutez l'extension. Par conséquent, vous devez l'ajouter à nouveau.

8
atomCode

On dirait que l'extension n'est pas installée dans la base de données particulière dont vous avez besoin. 

Vous devez vous connecter à cette base de données particulière avec 

 \CONNECT my_database

Puis installez l'extension dans cette base de données

 CREATE EXTENSION "uuid-ossp";
5
Olalekan Sogunle

si vous le faites à partir d'une commande unix (à l'exception de PGAdmin), n'oubliez pas de passer le DB en paramètre. sinon, cette extension ne sera pas activée lors de l'exécution de requêtes sur cette base de données.

psql -d -c "crée une EXTENSION pgcrypto;" 

0
odin38