it-swarm.com.de

Erweiterung existiert, aber uuid_generate_v4 schlägt fehl

Bei 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)

Wie Sie sehen, existiert die Erweiterung uuid-ossp. Wenn ich jedoch die Funktion für die Generierung uuid_v4 aufrufe, schlägt diese fehl:

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

);

Was ist daran falsch?

30
アレックス

Die Erweiterung ist available, aber nicht installiert in dieser Datenbank.

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

Wenn die Erweiterung bereits vorhanden ist, Sie aber die Funktion uuid_generate_v4 () nicht sehen, wenn Sie einen Befehl zum Beschreiben der Funktionen\ dfausführen, müssen Sie nur die Erweiterung löschen und erneut hinzufügen dass die Funktionen auch hinzugefügt werden. Hier ist die Problemreplikation:

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)

Wahrscheinlich ist geschehen, dass die Erweiterung ursprünglich zu einem früheren Zeitpunkt zum Cluster hinzugefügt wurde und Sie danach wahrscheinlich eine neue Datenbank in diesem Cluster erstellt haben. Wenn dies der Fall war, wird die neue Datenbank nur die Erweiterung "kennen", aber es werden nicht die UUID-Funktionen hinzugefügt, die beim Hinzufügen der Erweiterung auftreten. Daher müssen Sie es erneut hinzufügen.

8
atomCode

Sieht so aus, als ob die Erweiterung nicht in der gewünschten Datenbank installiert ist. 

Sie sollten sich mit dieser Datenbank verbinden 

 \CONNECT my_database

Dann installieren Sie die Erweiterung in dieser Datenbank

 CREATE EXTENSION "uuid-ossp";
5

wenn Sie dies über einen Unix-Befehl (außer PGAdmin) ausführen, vergessen Sie nicht, die DB als Parameter zu übergeben. Andernfalls wird diese Erweiterung nicht aktiviert, wenn Anforderungen in dieser Datenbank ausgeführt werden

psql -d -c "create EXTENSION pgcrypto;" 

0
odin38