ฉันจะติดตั้ง pgcrypto ใน PostgreSQL 8.4 ได้อย่างไร


23

ฉันใช้อูบุนตูเซิร์ฟเวอร์ 10.10 และผมได้ติดตั้ง PostgreSQL 8.4 apt-get install postgresqlใช้ ฉันต้องการใช้sha1()ฟังก์ชั่นในตัวแต่ดูเหมือนว่าฉันจะต้องติดตั้งpgcryptoก่อน แต่ฉันไม่รู้วิธีติดตั้ง

ไม่มีpgcryptoถ้าฉันพยายามติดตั้งโดยใช้apt-get install pgcryptoและฉันไม่พบไฟล์ใด ๆ ที่เริ่มต้นด้วยpgcryptoในระบบของฉัน (ฉันพยายามfind / -name "pgcrypto*")

ฉันจะติดตั้ง pgcrypto เพื่อให้สามารถใช้digest('word-to-hash','sha1')ฟังก์ชั่นในการสืบค้นฐานข้อมูลได้อย่างไร


อัปเดต:ฉันพยายามติดตั้ง pgcrypto ในเครื่อง Ubuntu อื่น หลังจากติดตั้งแพคเกจโดยใช้sudo apt-get install postgresql-contrib-8.4ฉันจะติดตั้งลงในฐานข้อมูล PostgreSQL ปัจจุบันได้อย่างไร


สวัสดี @Jonas ฉันไม่แน่ใจว่าคุณมีปัญหาในการติดตั้ง pgcrypto หรือหากคุณมีปัญหาในการติดตั้ง db ของคุณ ดูเหมือนว่าคุณมีปัญหาซื้อคืน ตรวจสอบว่าไฟล์นี้มีอยู่ในเส้นทางนี้/usr/local/pgsql/share/contrib/pgcrypto.sqlและแจ้งให้เราทราบ
jcolebrand

@jcolebrand: ไม่ฉันไม่มี/usr/local/pgsqlไดเรกทอรี ที่เดียวที่ฉันมี*.sqlไฟล์อยู่/usr/share/postgresql/8.4/แต่ไม่เกี่ยวข้องกับ crypto
Jonas

คำตอบ:


17

สำหรับ PG เวอร์ชั่นใหม่ลองอ่านคำตอบด้านล่างโดย Dustin Kirkland

มันเป็นโมดูลภายนอกสำหรับ Postgres คุณควรติดตั้งpostgresql-contrib-8.4แพ็คเกจ (หรือเวอร์ชั่น pg ของคุณ) ผ่าน apt:

apt-get install postgresql-contrib-8.4

จากนั้นคุณจะพบไฟล์ติดตั้ง sql ที่ใดที่หนึ่งใน/usr/share/postgresqlโฟลเดอร์และคุณจะต้องเรียกใช้pgcryto.sqlบนฐานข้อมูล

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

หรือ,

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

    database=# \i pgcrypto.sql

เมื่อฉันวิ่งsudo apt-get install postgres-contribฉันจะได้รับE: Unable to locate package postgres-contrib
Jonas

ฉัน googled และตอนนี้ผมได้ติดตั้งโดยใช้sudo apt-get install postgresql-contrib-8.4และเรียกใช้แล้วใช้\i <path-to-pgcrypto> psql
Jonas

นั่นคือวิธีที่จะทำ ฉันได้อัปเดตคำตอบเล็กน้อยเพื่อรวมบันทึกย่อของรุ่นสำหรับแพ็คเกจ
DrColossos

1
อาคำสั่งคือ\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Jonas

9
ภายใต้ postgresql 9.1 คุณพิมพ์ในบรรทัดคำสั่ง: CREATE EXTENSION pgcrypto
Danubian Sailor

19

PostgreSQL 9.1+

โปรดทราบว่าฉันกำลังทำงานกับ Ubuntu 12.04 ซึ่งใช้ postgresql 9.1

ที่นั่นฉันต้องการ:

sudo apt-get install postgresql-contrib

แล้วในฐานข้อมูลของฉัน:

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

และตอนนี้ฉันสามารถใช้ฟังก์ชัน 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

ฉันชอบคำตอบนี้จริง ๆ แต่คุณควรตอบคำถามด้วยตนเองสำหรับ 9.1+ (เมื่อเพิ่มฟีเจอร์นี้) เนื่องจาก OP ขอให้ชัดเจน 8.4 และเวอร์ชันของเขาไม่สนับสนุนCREATE EXTENSION (ซึ่งทำให้คำตอบอื่น ๆ พูดถูกต้องอย่างเคร่งครัด
Evan Carroll

0

สำหรับเวอร์ชันล่าสุดไม่มีไฟล์พา ธ สิ้นสุดด้วย pgcrypto.sql

สร้างส่วนขยาย pgcrypto ภายใต้ผู้ใช้ที่ต้องการ

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

หากในกรณีผู้ใช้ไม่ได้รับอนุญาตให้สร้างส่วนขยายให้สิทธิ์ superuser โดยเข้าสู่ระบบในฐานะผู้ใช้ postgres (ค่าเริ่มต้น) และลองอีกครั้ง

$ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.