gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:12:56 25 4
gpt4 key购买 nike

有时我在 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)

还有:

  1. 我在 Windows 中使用 PostgreSQL。是否有清除控制台的命令(如 Oracle 中的 cl scr)?

  2. 在使用 DML 脚本时,我需要在 Postgresql 中执行“提交”的概念吗?

最佳答案

语句以分号结尾。

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 TABLE
regress-> sometable
regress-> ;
ERROR: table "sometable" does not exist

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

关于您的其他问题:

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

  2. PostgreSQL 中的 DDL 是事务性的。您可以BEGIN 事务,发出一些 DDL,然后 COMMIT 事务以使其生效。如果您不在显式事务中执行 DDL,那么它会立即生效。

关于postgresql - 在psql中,为什么有些命令没有效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com