如何从命令行执行 SQL 语句?

如何从命令行执行 SQL 语句?

我是一个长期使用 GUI 的用户,正在尝试切换到命令行,但我不知道如何从 Ubuntu 命令行执行 SQL 语句。我正在使用 postgres。我可以使用\c连接到数据库并查看其中的表。我还可以使用(其中是数据库的名称)\d查看标题。我无法做的是查看实际数据。 \d dbnamedbname

我试了一下 SELECT * FROM dbname;,结果显示“dbname 附近语法错误”。我试了一下,没有使用分号,结果只得到了一个新的命令行。我该如何查看我的数据?提前致谢。

答案1

编辑:OP 的实际问题显然是表名完全由数字组成。根据SQL-92 标准表名不能以数字开头,但可以包含数字。对于这种情况,只需将名称括在双引号或单引号中,如下所示SELECT * FROM "12345";

本质上,你需要的是psql命令- Postgres 的命令行解释器,Ubuntu 上的 Postgres 安装默认自带。运行psql -U username databasename将允许您连接到该解释器,并通过该命令行解释器执行 SQL 查询。如果您询问在bashshell 中运行命令,则应该使用psql带标志的命令-c。类似于

psql -U username -d database.db -c "SELECT * FROM some_table"

对于多行查询,您可以使用定界符

$ psql -U admin_serg hello_world <<EOF
> SELECT * FROM foobar;
> EOF                  

 foo |     bar     
-----+-------------
   1 | Hello World
(1 row)

当然,如果您还没有使用 创建特定用户postgres,您可能需要这样做,或者只是psql先以用户身份登录sudo su postgres

至于语法错误,您可能尝试直接在命令行中输入 SQL 查询(在您的情况下,可能是bashshell )。这不是它的工作原理 -bash不理解 SQL,只理解其自己的语法,因此psql存在命令行解释器,就像其他数据库一样(sqlite3例如)或者有用于它的 GUI 工具(例如pgAdminpostgres 或sqlitebrowsersqlite3)。

也可以看看:

答案2

您可以从终端发出命令,但您可以获得开源软件包带有制表符补全、颜色等:

在此处输入图片描述


使用通用程序查询语言使用:

$ psql mydb

如果你省略数据库名称,那么它将默认为你的用户帐户名。你已在上一节中发现了此方案。

在 psql 中,您将看到以下消息:

Welcome to psql 8.3.23, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

mydb=>

psql 打印出的最后一行是提示符,它表明 psql 正在监听您的操作,并且您可以在 psql 维护的工作空间中输入 SQL 查询。尝试以下命令:

mydb=> SELECT version();
                            version
----------------------------------------------------------------
 PostgreSQL 8.3.23 on i586-pc-linux-gnu, compiled by GCC 2.96
(1 row)

mydb=> SELECT current_date;
    date
------------
 2002-08-31
(1 row)

mydb=> SELECT 2 + 2;
 ?column?
----------
        4
(1 row)

答案3

您收到该错误消息是因为您忘记在查询中包含 Schema SELECT * FROM dbname;

您不应该使用 \d,而应该将 \dt 与 Schema 名称(而非 DB 名称)一起使用。例如\dt "MySchema".*

以下是连接并查看数据库、模式和表的方法:

*) 输入“\?”获取帮助

*) 输入“\conninfo”来查看您以哪个用户身份连接。

*) 输入“\l”查看数据库列表。

在此处输入图片描述

*) 通过“\c ”连接到数据库,例如“\c GeneDB1”

在此处输入图片描述

您应该看到键提示更改为新的 DB,如下所示:在此处输入图片描述

*) 现在您处于给定的数据库中,您想要知道该数据库的模式。执行此操作的最佳命令是“\dn”。

在此处输入图片描述

其他也可以使用(但效果不太好)的命令是“从 information_schema.schemata 中选择 schema_name;”和“从 pg_catalog.pg_namespace 中选择 nspname;”:

在此处输入图片描述

-) 现在您有了模式,您想知道这些模式中的表。为此,您可以使用“dt”命令。例如“\dt“GeneSchema1”.*”

在此处输入图片描述

*) 现在您可以进行查询。例如:

在此处输入图片描述

*) 上述数据库、模式和表在 pgAdmin 中的样子如下:

在此处输入图片描述

相关内容