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 können, uuid-ossp
gibt es eine Erweiterung. Wenn ich jedoch die Funktion zur Generierung uuid_v4
aufrufe, schlägt dies fehl:
CREATE TABLE my_table (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
name character varying(32) NOT NULL,
);
Was ist daran falsch?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
quelle
quelle
Antworten:
Die Erweiterung ist verfügbar, aber nicht in dieser Datenbank installiert .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
quelle
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
Datenbank auszuwählen, die man in die pgsql-Konsole schreiben kannWenn die Erweiterung bereits vorhanden ist, Sie jedoch die Funktion uuid_generate_v4 () nicht sehen, wenn Sie einen Befehl zum Beschreiben von Funktionen \ df ausführen, müssen Sie die Erweiterung nur löschen und erneut hinzufügen, damit auch die Funktionen 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)
Was wahrscheinlich passiert ist, ist, dass die Erweiterung ursprünglich zu einem früheren Zeitpunkt zum Cluster hinzugefügt wurde und Sie anschließend wahrscheinlich eine neue Datenbank innerhalb dieses Clusters erstellt haben. Wenn dies der Fall ist, wird die neue Datenbank nur die Erweiterung "kennen", aber es werden nicht die UUID-Funktionen hinzugefügt, was passiert, wenn Sie die Erweiterung hinzufügen. Daher müssen Sie es erneut hinzufügen.
quelle
Anscheinend ist die Erweiterung nicht in der Datenbank installiert, die Sie benötigen.
Sie sollten eine Verbindung zu dieser bestimmten Datenbank mit herstellen
Installieren Sie dann die Erweiterung in dieser Datenbank
CREATE EXTENSION "uuid-ossp";
quelle
Das hat bei mir funktioniert.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
Stellen Sie sicher, dass die Erweiterung auf pg_catalog und nicht in Ihrem Schema angezeigt wird ...
quelle
Wenn Sie dies über den Unix-Befehl (außer PGAdmin) tun, vergessen Sie nicht, die Datenbank als Parameter zu übergeben. Andernfalls wird diese Erweiterung nicht aktiviert, wenn Anforderungen in dieser Datenbank ausgeführt werden
psql -d -c "create EXTENSION pgcrypto;"
quelle
# 1 Installieren Sie die uuid-ossp-Erweiterung in einem genauen Schema neu:
SET search_path TO public; DROP EXTENSION IF EXISTS "uuid-ossp"; CREATE EXTENSION "uuid-ossp" SCHEMA public;
Wenn dies eine Neuinstallation ist, können Sie
SET
und überspringenDROP
. Credits zu @atomCode ( Details )Danach sollte die Funktion uuid_generate_v4 () im rechten Schema angezeigt werden ( wenn die
\df
Abfrage in der Eingabeaufforderung psql ausgeführt wird) .# 2 Verwenden Sie vollqualifizierte Namen (mit
schemaname.
Qualifizierer):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
quelle
Wenn Sie das geändert haben
search_path
, geben Sie das öffentliche Schema für die Funktion an:quelle