为什么有些 psql 行在数据库名称后有 (# 或 '#?
Why do some psql lines have (# or '# after the database name?
我在 Mac 上的命令行中使用 psql。通常,当我键入命令时,开头行显示为 database_name=#
。我用 ;
终止命令,效果很好。
有时当我写一个命令(从我正在学习的教科书上复制粘贴)时,我的开头行是以下之一:
postgis_in_action(#
postgis_in_action'#
请问(
和'
是什么意思?我该如何逃脱他们回到 'normal'?
当您键入一个多行查询并有一些开始和结束括号,例如 ( ) 时,开始行将改变,让用户知道他已经开始了一个需要关闭的括号。
看下面的例子:
node1=# select
node1-# *
node1-# from
node1-# dept
node1-# where
node1-# deptno=
node1-# 1 and loc in
node1-# (
node1(# 'isb'
node1(# )
node1-# ;
deptno | dname | loc
--------+-------+-----
(0 rows)
node1=#
如果用户不知何故忘记关闭括号,则开头行将显示 database_name(#
即使是缺少括号的单行查询也会导致相同的开头行。
node1=# select * from dept where deptno=1 and loc in ('isb';
node1(#
要使开头行正常,您必须完成查询或只需按 CTRL+C 键。
披露:我为 EnterpriseDB (EDB)
工作
您输入的命令在您上次点击 "return" 时位于带括号的结构或 '
字符串的中间。它正在等待您关闭它们。它将忽略它看到的任何正常命令结束的 ;
字符,直到您关闭这些构造。
如果到目前为止你的命令是正确的,那么你只需要把它写完。
如果你想放弃这个命令,因为你应该在几行之前关闭你的构造,而现在关闭它们是错误的做法,那么你可以点击 ctrl-C,或者在 (
的情况下,您可以单独在一行上键入 \r
。对于'
,你需要在使用\r
之前关闭它,因为'\r'是字符串中的合法内容,所以它无法将你从字符串中转义出来。
此外,您可以通过在一行中单独键入 \e
来编辑您目前为止的命令。但是同样,当在 '
中时,您需要先关闭引号,否则 \e 只会成为字符串的一部分。
这意味着您缺少右大括号或撇号。
正常一:
postgres=# select pg_size_pretty(pg_relation_size('test'));
pg_size_pretty
----------------
8192 bytes
(1 row)
错过了braces/apostrophe:
postgres=# select pg_size_pretty(pg_relation_size('test')
postgres(# );
pg_size_pretty
----------------
8192 bytes
(1 row)
postgres=# select count(*) from test where name = 'vignesh
postgres'# ';
count
-------
10
(1 row)
没有分号的有效查询将带有连字符:
postgres=# select count(*) from test where name = 'vignesh'
postgres-# ;
count
-------
100
(1 row)
只需按 Ctrl + C 取消该查询。由于该查询已取消而不是 运行,因此按向上箭头将不会弹出该查询,因为它在历史记录中不可用。
我在 Mac 上的命令行中使用 psql。通常,当我键入命令时,开头行显示为 database_name=#
。我用 ;
终止命令,效果很好。
有时当我写一个命令(从我正在学习的教科书上复制粘贴)时,我的开头行是以下之一:
postgis_in_action(#
postgis_in_action'#
请问(
和'
是什么意思?我该如何逃脱他们回到 'normal'?
当您键入一个多行查询并有一些开始和结束括号,例如 ( ) 时,开始行将改变,让用户知道他已经开始了一个需要关闭的括号。
看下面的例子:
node1=# select
node1-# *
node1-# from
node1-# dept
node1-# where
node1-# deptno=
node1-# 1 and loc in
node1-# (
node1(# 'isb'
node1(# )
node1-# ;
deptno | dname | loc
--------+-------+-----
(0 rows)
node1=#
如果用户不知何故忘记关闭括号,则开头行将显示 database_name(#
即使是缺少括号的单行查询也会导致相同的开头行。
node1=# select * from dept where deptno=1 and loc in ('isb';
node1(#
要使开头行正常,您必须完成查询或只需按 CTRL+C 键。
披露:我为 EnterpriseDB (EDB)
工作您输入的命令在您上次点击 "return" 时位于带括号的结构或 '
字符串的中间。它正在等待您关闭它们。它将忽略它看到的任何正常命令结束的 ;
字符,直到您关闭这些构造。
如果到目前为止你的命令是正确的,那么你只需要把它写完。
如果你想放弃这个命令,因为你应该在几行之前关闭你的构造,而现在关闭它们是错误的做法,那么你可以点击 ctrl-C,或者在 (
的情况下,您可以单独在一行上键入 \r
。对于'
,你需要在使用\r
之前关闭它,因为'\r'是字符串中的合法内容,所以它无法将你从字符串中转义出来。
此外,您可以通过在一行中单独键入 \e
来编辑您目前为止的命令。但是同样,当在 '
中时,您需要先关闭引号,否则 \e 只会成为字符串的一部分。
这意味着您缺少右大括号或撇号。
正常一:
postgres=# select pg_size_pretty(pg_relation_size('test'));
pg_size_pretty
----------------
8192 bytes
(1 row)
错过了braces/apostrophe:
postgres=# select pg_size_pretty(pg_relation_size('test')
postgres(# );
pg_size_pretty
----------------
8192 bytes
(1 row)
postgres=# select count(*) from test where name = 'vignesh
postgres'# ';
count
-------
10
(1 row)
没有分号的有效查询将带有连字符:
postgres=# select count(*) from test where name = 'vignesh'
postgres-# ;
count
-------
100
(1 row)
只需按 Ctrl + C 取消该查询。由于该查询已取消而不是 运行,因此按向上箭头将不会弹出该查询,因为它在历史记录中不可用。