如何在psql中切换数据库?


Answers:


1654

在PostgreSQL中,可以使用\connect客户端工具psql 的meta命令:

\connect DBNAME

或简而言之:

\c DBNAME

126
+1:这只是psql命令,在Postgres本身中,无法“切换”。实际上,psql并不是在MySQL上下文中“切换”,而是关闭一个连接并打开另一个连接。
rfusca 2010年

12
因此,没有机会使用SQL吗?
鲍里斯

5
那么这可以在.sql文件中的SQL语句之间工作吗?我可以CREATE DATABASE mydb;跟着\connect mydb吗?
J86

1
@Ciwan我很确定您不能psql在SQL脚本文件中包含命令。
肯尼·埃维特

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,它将在启动时切换到名称为in的数据库。


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使用模式。一个数据库中可以有多个方案。因此,如果您在同一个数据库中工作,并且想要更改架构,则可以执行以下操作:

SET SCHEMA 'schema_name';


9
错了 这只会更改搜索路径中使用的架构。一个数据库包含多个架构 ta。
所有工人都是必不可少的

@cpburnz我同意您的要求
MangEngkus 2015年

1
除了@cpburnz的注释之外,还SET SCHEMA可以使用SET SCHEMA 'schema_name'not SET SCHEMA 'database_name'。因此,这是一种更改架构而不是数据库的SQL方法。这也类似于SET search_path TO schema_name。请参阅此处此处的文档。
Ibrahim Dauda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.