psqlでデータベースを切り替える方法は?


回答:


1656

PostgreSQLでは\connect、クライアントツールpsqlのメタコマンドを使用できます。

\connect DBNAME

要するに:

\c DBNAME

126
+1:これは単なるpsqlコマンドです。Postgres自体では、「切り替える」方法はありません。実際、psqlはMySQLのコンテキストでは「切り替え」ではなく、1つの接続を閉じて別の接続を開くだけです。
rfusca

12
それで、SQLでそれを行う機会はありませんか?
Borys、2013年

5
それでは、これは.sqlファイル内のSQLステートメント間で機能しますか?例えば、私はCREATE DATABASE mydb;続いても\connect mydbいいですか?
J86

1
@Ciwan psqlSQLスクリプトファイルにコマンドを含めることはできません。
ケニーエビット

183

\c <database>またはを使用してデータベースに接続できます\connect <database>



31

psqlで接続するときにデータベースを選択できます。これは、スクリプトから使用する場合に便利です。

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

4
おかげで、私は狂気になっていた... :)
Richard




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(現在のENVデータベースに再認証されます)

  2. \?(POSTGRESQLコマンドの場合)

または

  1. \ h(SQLコマンドの場合)

  2. Qを押して終了します


-11

他の回答で述べたように、別のデータベースを使用するには接続を変更する必要があります。

Postgresはスキーマで動作します。1つのデータベースに複数のスキーマを含めることができます。したがって、同じデータベース内で作業していて、スキーマを変更したい場合は、次のようにします。

SET SCHEMA 'schema_name';


9
これは間違っています。これにより、検索パスで使用されるスキーマのみが変更されます。データベースは、複数含まれているスキーマ TAを。
すべての労働者は必須である

@cpburnz同意します
MangEngkus、2015

1
@cpburnzのコメントに加えてSET SCHEMASET SCHEMA 'schema_name'not として使用されSET SCHEMA 'database_name'ます。したがって、これはデータベースではなくスキーマを変更するSQLの方法です。これもに似ていSET search_path TO schema_nameます。こちらまたはこちらのドキュメントをご覧ください
Ibrahim Dauda、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.