Wie installiere ich pgcrypto in PostgreSQL 8.4?

23

Ich benutze Ubuntu Server 10.10 und habe PostgreSQL 8.4 mit installiert apt-get install postgresql. Ich möchte die eingebaute sha1()Funktion verwenden, aber es scheint, dass ich pgcryptozuerst installieren muss . Aber ich weiß nicht, wie ich es installieren soll.

Es gibt keine, pgcryptowenn ich versuche, es mit zu installieren, apt-get install pgcryptound ich finde keine Dateien, die mit pgcryptoin meinem System beginnen (ich habe es versucht find / -name "pgcrypto*").

Wie installiere ich pgcrypto, damit ich die digest('word-to-hash','sha1')Funktion in meinen Datenbankabfragen verwenden kann?


Update: Ich habe Probleme, pgcrypto auf einem anderen Ubuntu-Rechner zu installieren. sudo apt-get install postgresql-contrib-8.4Wie installiere ich das Paket nach der Installation in meine aktuelle PostgreSQL-Datenbank?

Jonas
quelle
Hallo @Jonas, ich bin mir nicht sicher, ob Sie Probleme mit der Installation von pgcrypto haben oder ob Sie Probleme damit haben, dass es mit Ihrer Datenbankinstallation funktioniert. Es klingt wie Sie ein Repo-Problem haben. Stellen /usr/local/pgsql/share/contrib/pgcrypto.sqlSie sicher, dass diese Datei in diesem Pfad vorhanden ist, und teilen Sie uns dies mit.
Jcolebrand
@ jcolebrand: Nein, ich habe kein /usr/local/pgsqlVerzeichnis. Der einzige Ort, an dem ich *.sqlDateien habe, ist in, /usr/share/postgresql/8.4/aber kein kryptobezogener.
Jonas

Antworten:

17

Weitere Informationen zu neueren PG-Versionen finden Sie in der Antwort von Dustin Kirkland

Es ist ein externes Modul für Postgres. Sie sollten das postgresql-contrib-8.4Paket (oder Ihre pg-Version) über apt installieren :

apt-get install postgresql-contrib-8.4

Dann finden Sie die SQL-Installationsdatei irgendwo im /usr/share/postgresqlOrdner und müssen sie in pgcryto.sqlder Datenbank ausführen .

psql -d <database> -f /usr/share/postgresql/8.4/contrib/pgcrypto.sql

Oder,

$ cd /usr/share/postgresql/8.4/contrib
$ psql -d <database>
    psql (8.4.8)
    Type "help" for help.

    database=# \i pgcrypto.sql
DrColossos
quelle
Wenn ich renne, sudo apt-get install postgres-contribbekomme ichE: Unable to locate package postgres-contrib
Jonas
Ich habe gegoogelt und jetzt habe ich es mit installiert sudo apt-get install postgresql-contrib-8.4und dann \i <path-to-pgcrypto>mit ausgeführt psql.
Jonas
So macht man das. Ich habe die Antwort leicht aktualisiert, um den Hinweis auf die Version für das Paket
DrColossos
1
Ah, der Befehl war\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Jonas
9
Unter postgresql 9.1 geben Sie folgendes Kommando ein: CREATE EXTENSION pgcrypto
Danubian Sailor
19

PostgreSQL 9.1+

Beachten Sie, dass ich an Ubuntu 12.04 arbeite, das postgresql 9.1 verwendet.

Dort musste ich:

sudo apt-get install postgresql-contrib

Und dann in meiner Datenbank:

postgres@ztrustee:~$ psql test
psql (9.1.3)
Type "help" for help.
test=# CREATE EXTENSION pgcrypto;
CREATE EXTENSION

Und jetzt kann ich die pgcrypto-Funktionalität gen_random_bytes () verwenden:

test=# create table test ( 
  id 
    text 
    not null 
    default encode( gen_random_bytes( 32 ), 'hex' ) 
    primary key, 
  value 
    text 
); 
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
test=# \d test
                            Table "public.test"
 Column | Type |                         Modifiers                          
--------+------+------------------------------------------------------------
 id     | text | not null default encode(gen_random_bytes(32), 'hex'::text)
 value  | text | 
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)

test=# insert into test (value) VALUES ('scoobydoo');
INSERT 0 1
test=# select * from test;
                                id                                |   value   
------------------------------------------------------------------+-----------
 76dd5bd0120d3df797f932fbcb4f8aa5088e215ee2b920dddbff59c8595fbac7 | scoobydoo
Dustin Kirkland
quelle
Ich mag diese Antwort wirklich, obwohl Sie eine Frage für 9.1+ selbst beantwortet haben sollten (als diese Funktion hinzugefügt wurde), da das OP eindeutig nach 8.4 gefragt hat und seine Version nicht unterstützt CREATE EXTENSION (was die andere Antwort streng genommen korrekt macht.
Evan Carroll
0

Für die neueste Version gibt es kein Dateipfadende mit pgcrypto.sql.

Erstellen Sie eine Erweiterung pgcrypto unter dem gewünschten Benutzer.

$ psql -U <username> -d mydb

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

mydb=> CREATE EXTENSION pgcrypto;

CREATE EXTENSION
mydb=> 

Wenn der Benutzer keine Berechtigung zum Erstellen einer Erweiterung hat, erteilen Sie dem Superuser die Berechtigung, indem Sie sich als postgres-Benutzer (Standard) anmelden, und versuchen Sie es erneut.

$ psql --u postgres

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# ALTER USER <username> WITH SUPERUSER;

ALTER ROLE
Veeresh Digasangi
quelle