Làm thế nào để chuyển đổi cơ sở dữ liệu trong psql?


Câu trả lời:


1656

Trong PostgreSQL, bạn có thể sử dụng lệnh \connectmeta của công cụ máy khách psql:

\connect DBNAME

hoặc nói ngắn gọn:

\c DBNAME

126
+1: Đây chỉ là một lệnh psql, trong chính Postgres, không có cách nào để "chuyển đổi". Trên thực tế, psql không "chuyển đổi" trong bối cảnh MySQL, chỉ cần đóng một kết nối và mở một kết nối khác.
rfusca

12
Vì vậy, không có cơ hội để làm điều đó với SQL?
Borys

5
Vì vậy, điều này có thể làm việc giữa các câu lệnh SQL trong một .sqltập tin? ví dụ tôi có thể CREATE DATABASE mydb;theo sau \connect mydbkhông?
J86

1
@Ciwan Tôi khá chắc chắn rằng bạn không thể bao gồm psqlcác lệnh trong tệp tập lệnh SQL.
Kenny Evitt

183

Bạn có thể kết nối với cơ sở dữ liệu với \c <database>hoặc \connect <database>.



31

Bạn có thể chọn cơ sở dữ liệu khi kết nối với psql. Điều này rất hữu ích khi sử dụng nó từ một tập lệnh:

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

4
Cảm ơn, tôi đã trở nên điên loạn ... :)
Richard

10

\lcho cơ sở dữ liệu \cDatabaseName để chuyển sang db \dfcho các thủ tục được lưu trữ trong cơ sở dữ liệu cụ thể



7

Sử dụng câu lệnh dưới đây để chuyển sang các cơ sở dữ liệu khác nhau nằm trong RDMS postgreSQL của bạn

\c databaseName

1

Nếu bạn muốn chuyển sang cơ sở dữ liệu cụ thể khi khởi động, hãy thử

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

Theo mặc định, Postgres chạy trên cổng 5432. Nếu nó chạy trên cổng khác, hãy đảm bảo vượt qua cổng trong dòng lệnh.

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

Bằng một bí danh đơn giản, chúng ta có thể làm cho nó tiện dụng.

Tạo một bí danh trong .bashrchoặc.bash_profile

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

Chạy psqltrong dòng lệnh, nó sẽ chuyển sang cơ sở dữ liệu mặc định; psql anotherdb, nó sẽ chuyển sang db với tên trong đối số, khi khởi động.


1

Mặc dù không được nêu rõ ràng trong câu hỏi, mục đích là để kết nối với một lược đồ / cơ sở dữ liệu cụ thể.

Một tùy chọn khác là kết nối trực tiếp với lược đồ. Thí dụ:

sudo -u postgres psql -d my_database_name

Nguồn từ 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

Bạn cũng có thể kết nối với cơ sở dữ liệu với ROLE khác nhau như sau.

\connect DBNAME ROLENAME;

hoặc là

\c DBNAME ROLENAME;

0

Bạn có thể kết nối bằng

\ c dbname

Nếu bạn muốn xem tất cả các lệnh có thể cho POSTGRESQL hoặc SQL, hãy làm theo các bước sau:

  1. rails dbconsole (Bạn sẽ chuyển hướng đến cơ sở dữ liệu ENV hiện tại của bạn)

  2. \? (Đối với các lệnh POSTGRESQL)

hoặc là

  1. \ h (Đối với các lệnh SQL)

  2. Nhấn Q để thoát


-11

Như đã đề cập trong các câu trả lời khác, bạn cần thay đổi kết nối để sử dụng cơ sở dữ liệu khác.

Postgres làm việc với các lược đồ. Bạn có thể có nhiều sơ đồ trong một cơ sở dữ liệu. Vì vậy, nếu bạn đang làm việc trong cùng một cơ sở dữ liệu và muốn thay đổi lược đồ, Bạn có thể làm:

SET SCHEMA 'schema_name';


9
Cái này sai. Điều này sẽ chỉ thay đổi lược đồ được sử dụng trong đường dẫn tìm kiếm. Một cơ sở dữ liệu chứa nhiều lược đồ ta.
Tất cả công nhân là cần thiết

@cpburnz Tôi đồng ý với bạn
MangEngkus

1
Ngoài nhận xét của @ cpburnz, SET SCHEMAđược sử dụng là SET SCHEMA 'schema_name'không SET SCHEMA 'database_name'. Vì vậy, đây là một cách SQL để thay đổi lược đồ chứ không phải cơ sở dữ liệu. Ngoài ra điều này là tương tự như SET search_path TO schema_name. Xem tài liệu ở đây hoặc ở đây .
Ibrahim Dauda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.