วิธีการสลับฐานข้อมูลใน psql


1081

ในMySQLฉันใช้use database_name;

อะไรที่psqlเทียบเท่ากัน?


1
ตกลงดังนั้นนี่เป็นเรื่องเกี่ยวกับpsqlส่วนหน้าของ PostgreSQL หรือไม่
Peter Mortensen

คำตอบ:


1655

ใน PostgreSQL คุณสามารถใช้\connectmeta-command ของเครื่องมือไคลเอ็นต์ psql:

\connect DBNAME

หรือสั้น:

\c DBNAME

126
+1: นี่เป็นเพียงคำสั่ง psql ใน Postgres เองไม่มีวิธีใดในการ "สลับ" ในความเป็นจริง psql ไม่ได้ "สลับ" ในบริบท MySQL เพียงปิดการเชื่อมต่อหนึ่งและเปิดอีกครั้ง
rfusca

12
ดังนั้นจึงไม่มีโอกาสที่จะทำกับ SQL?
Borys

5
ดังนั้นสามารถใช้งานได้กับคำสั่ง SQL ใน.sqlไฟล์หรือไม่? เช่นฉันจะได้CREATE DATABASE mydb;ตามมาด้วย\connect mydb?
J86

1
@Ciwan ฉันค่อนข้างแน่ใจว่าคุณไม่สามารถรวมpsqlคำสั่งในไฟล์สคริปต์ SQL ได้
Kenny Evitt



31

คุณสามารถเลือกฐานข้อมูลเมื่อเชื่อมต่อกับ psql สิ่งนี้มีประโยชน์เมื่อใช้จากสคริปต์:

sudo -u postgres psql -c "CREATE SCHEMA test AUTHORIZATION test;" test

4
ขอบคุณฉันเริ่มบ้า ... :)
Richard

10

\lสำหรับฐานข้อมูล \cDatabaseName เพื่อสลับไปยัง db \dfสำหรับโพรซีเดอร์ที่เก็บในฐานข้อมูลเฉพาะ



7

ใช้คำสั่งด้านล่างเพื่อสลับไปยังฐานข้อมูลต่างๆที่อยู่ใน postgreSQL RDMS ของคุณ

\c databaseName

1

หากคุณต้องการสลับไปยังฐานข้อมูลเฉพาะเมื่อเริ่มต้นให้ลอง

/Applications/Postgres.app/Contents/Versions/9.5/bin/psql vigneshdb;

ตามค่าเริ่มต้น Postgres จะทำงานบนพอร์ต 5432 หากทำงานบนพอร์ตอื่นให้ตรวจสอบให้แน่ใจว่าได้ผ่านพอร์ตในบรรทัดคำสั่ง

/Applications/Postgres.app/Contents/Versions/9.5/bin/psql -p2345 vigneshdb;

โดยนามแฝงง่ายๆเราสามารถทำให้เป็นประโยชน์

สร้างนามแฝงใน.bashrcหรือของคุณ.bash_profile

function psql()
{
    db=vigneshdb
    if [ "$1" != ""]; then
            db=$1
    fi
    /Applications/Postgres.app/Contents/Versions/9.5/bin/psql -p5432 $1
}

เรียกใช้psqlในบรรทัดคำสั่งมันจะเปลี่ยนเป็นฐานข้อมูลเริ่มต้น psql anotherdbมันจะสลับไปยัง db ด้วยชื่อในอาร์กิวเมนต์เมื่อเริ่มต้น


1

แม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนในคำถามวัตถุประสงค์คือเพื่อเชื่อมต่อกับสคีมา / ฐานข้อมูลที่เฉพาะเจาะจง

อีกตัวเลือกหนึ่งคือเชื่อมต่อกับสคีมาโดยตรง ตัวอย่าง:

sudo -u postgres psql -d my_database_name

แหล่งที่มาจากman psql:

-d dbname
--dbname=dbname
   Specifies the name of the database to connect to. This is equivalent to specifying dbname as the first non-option argument on the command line.

   If this parameter contains an = sign or starts with a valid URI prefix (postgresql:// or postgres://), it is treated as a conninfo string. See Section 31.1.1, Connection Strings”, in the
   documentation for more information.

1

คุณยังสามารถเชื่อมต่อกับฐานข้อมูลด้วย ROLE อื่นได้ดังนี้

\connect DBNAME ROLENAME;

หรือ

\c DBNAME ROLENAME;

0

คุณสามารถเชื่อมต่อโดยใช้

\ c dbname

หากคุณต้องการที่จะเห็นคำสั่งที่เป็นไปได้ทั้งหมดสำหรับ POSTGRESQL หรือ SQL ทำตามขั้นตอนนี้:

  1. rails dbconsole (คุณจะ redericted ไปยังฐานข้อมูล ENV ปัจจุบันของคุณ)

  2. \? (สำหรับคำสั่ง POSTGRESQL)

หรือ

  1. \ h (สำหรับคำสั่ง SQL)

  2. กด Q เพื่อออก


-11

ดังที่กล่าวไว้ในคำตอบอื่น ๆ คุณต้องเปลี่ยนการเชื่อมต่อเพื่อใช้ฐานข้อมูลอื่น

Postgres ทำงานกับสคีมา คุณสามารถมีหลายรูปแบบในฐานข้อมูลเดียว ดังนั้นหากคุณทำงานในฐานข้อมูลเดียวกันและต้องการเปลี่ยนสคีมาคุณสามารถทำได้:

SET SCHEMA 'schema_name';


9
นี่เป็นสิ่งที่ผิด สิ่งนี้จะเปลี่ยนสกีมาที่ใช้ในเส้นทางการค้นหาเท่านั้น ฐานข้อมูลมีหลายสคีตา
คนงานทุกคนสำคัญเมื่อ

@cpburnz ฉันเห็นด้วยกับคุณ
MangEngkus

1
นอกจากนี้ในการแสดงความคิดเห็นของ @ cpburnz, SET SCHEMAใช้เป็นไม่ได้SET SCHEMA 'schema_name' SET SCHEMA 'database_name'ดังนั้นนี่เป็นวิธี SQL ในการเปลี่ยนสคีมาไม่ใช่ฐานข้อมูล SET search_path TO schema_nameนอกจากนี้จะคล้ายกับ ดูเอกสารที่นี่หรือที่นี่
Ibrahim Dauda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.