为了账号安全,请及时绑定邮箱和手机立即绑定

在psql中,为什么有些命令没有效果?

在psql中,为什么有些命令没有效果?

在psql中,为什么有些命令没有效果?有时我的命令psql似乎没有效果。知道为什么吗?以下是数据库中所有表的列表library_development:library_development=> \d                List of relations Schema |       Name        | Type  |  Owner--------+-------------------+-------+----------  public | Pavan             | table | postgres public | schema_migrations | table | sai(2 rows)在此之后我删除的表Pavan使用:library_development-> drop table Pavan但是表格没有被删除,其显示如下:library_development=> \d                List of relations Schema |       Name        | Type  |  Owner--------+-------------------+-------+----------  public | Pavan             | table | postgres public | schema_migrations | table | sai(2 rows)也:我在Windows中使用PostgreSQL。是否有任何清除控制台的命令(如Oracle中的cl scr)?在使用DML脚本时,我是否需要在Postgresql中执行“提交”的概念?
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

声明以分号结尾。

psql,没有分号的情况下按Enter键会将语句继续到下一行,将您写入查询缓冲区的内容添加到查询缓冲区而不是执行它。您会注意到提示符从更改dbname=>dbname->,表示您处于延续行。

regress=> DROP TABLE sometable
regress-> \r
Query buffer reset (cleared).regress=> DROP TABLE sometable;ERROR:  table "sometable" does not exist
regress=>

请注意,在没有分号的情况下按Enter键后,提示符将更改为regress-#并且不执行任何操作。没有表sometable,所以如果语句运行,则会报告错误。

接下来,看下\r一行的使用情况?这会清除查询缓冲区。请注意,提示会更改回regress=#清除缓冲区的时间,因为不再缓冲部分语句。

这显示了如何跨行分割语句:

regress=> DROP TABLEregress-> sometable
regress-> ;ERROR:  table "sometable" does not exist

令人困惑的是,psql反斜杠命令就像\d是换行符终止,而不是分号终止,所以当你按Enter键时它们运行。当你想在编写语句时(比如说)查看表定义时,这很方便,但对于新手来说这有点令人困惑。

至于你的其他问题:

  1. 如果psqlWindows中有“清除屏幕”命令,我还没有找到它。在Linux上我只使用control-L,与任何其他使用readline的程序相同。在Windows \! cls中将工作。

  2. PostgreSQL中的DDL是事务性的。您可以BEGIN进行事务,发出一些DDL以及COMMIT使事务生效的事务。如果您没有在显式事务中执行DDL,则它会立即生效。


查看完整回答
反对 回复 2019-07-23
  • 1 回答
  • 0 关注
  • 846 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信