我是一个长期使用 GUI 的用户,正在尝试切换到命令行,但我不知道如何从 Ubuntu 命令行执行 SQL 语句。我正在使用 postgres。我可以使用\c
连接到数据库并查看其中的表。我还可以使用(其中是数据库的名称)\d
查看标题。我无法做的是查看实际数据。 \d dbname
dbname
我试了一下 SELECT * FROM dbname;
,结果显示“dbname 附近语法错误”。我试了一下,没有使用分号,结果只得到了一个新的命令行。我该如何查看我的数据?提前致谢。
答案1
编辑:OP 的实际问题显然是表名完全由数字组成。根据SQL-92 标准表名不能以数字开头,但可以包含数字。对于这种情况,只需将名称括在双引号或单引号中,如下所示SELECT * FROM "12345";
本质上,你需要的是psql
命令- Postgres 的命令行解释器,Ubuntu 上的 Postgres 安装默认自带。运行psql -U username databasename
将允许您连接到该解释器,并通过该命令行解释器执行 SQL 查询。如果您询问在bash
shell 中运行命令,则应该使用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 查询(在您的情况下,可能是bash
shell )。这不是它的工作原理 -bash
不理解 SQL,只理解其自己的语法,因此psql
存在命令行解释器,就像其他数据库一样(sqlite3
例如)或者有用于它的 GUI 工具(例如pgAdmin
postgres 或sqlitebrowser
sqlite3)。
也可以看看:
答案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”
*) 现在您处于给定的数据库中,您想要知道该数据库的模式。执行此操作的最佳命令是“\dn”。
其他也可以使用(但效果不太好)的命令是“从 information_schema.schemata 中选择 schema_name;”和“从 pg_catalog.pg_namespace 中选择 nspname;”:
-) 现在您有了模式,您想知道这些模式中的表。为此,您可以使用“dt”命令。例如“\dt“GeneSchema1”.*”
*) 现在您可以进行查询。例如:
*) 上述数据库、模式和表在 pgAdmin 中的样子如下: