it-swarm.dev

Jak zainstalować pgcrypto w PostgreSQL 8.4?

Używam Ubuntu Server 10.10 i zainstalowałem PostgreSQL 8.4 używając apt-get install postgresql. Chciałbym użyć wbudowanej funkcji sha1(), ale wygląda na to, że najpierw muszę zainstalować pgcrypto. Ale nie wiem jak to zainstalować.

Nie ma pgcrypto, jeśli spróbuję zainstalować go za pomocą apt-get install pgcrypto I nie znajdę żadnych plików zaczynających się od pgcrypto w moim systemie (próbowałem find / -name "pgcrypto*" ).

Jak zainstalować pgcrypto, aby móc używać funkcji digest('Word-to-hash','sha1') w zapytaniach do bazy danych?


Aktualizacja: Mam problem z zainstalowaniem pgcrypto na innym komputerze Ubuntu. Po zainstalowaniu pakietu za pomocą Sudo apt-get install postgresql-contrib-8.4 Jak zainstalować go w mojej bieżącej bazie danych PostgreSQL?

23
Jonas

W przypadku nowszej wersji PG sprawdź poniższą odpowiedź Dustin Kirkland

To zewnętrzny moduł dla Postgres. Powinieneś zainstalować postgresql-contrib-8.4 (lub twoja wersja pg) pakiet za pośrednictwem apt:

apt-get install postgresql-contrib-8.4

Następnie znajdziesz plik instalacyjny sql gdzieś w /usr/share/postgresql folder, a będziesz musiał uruchomić pgcryto.sql w bazie danych.

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

Lub,

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

    database=# \i pgcrypto.sql
18
DrColossos

PostgreSQL 9.1+

Zauważ, że pracuję na Ubuntu 12.04, który używa Postgresql 9.1.

Tam musiałem:

Sudo apt-get install postgresql-contrib

A potem w mojej bazie danych:

[email protected]:~$ psql test
psql (9.1.3)
Type "help" for help.
test=# CREATE EXTENSION pgcrypto;
CREATE EXTENSION

A teraz mogę korzystać z funkcji pgcrypto, gen_random_bytes ():

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
20
Dustin Kirkland

W najnowszej wersji ścieżka pliku nie kończy się na pgcrypto.sql.

Utwórz rozszerzenie pgcrypto pod wymaganym użytkownikiem.

$ 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=> 

W przypadku, gdy użytkownik nie ma uprawnień do utworzenia rozszerzenia, należy zezwolić administratorowi na zalogowanie jako użytkownik postgres (domyślny) i spróbować ponownie.

$ 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
1