修改某行的值

问题描述 投票:0回答:1

我正在尝试修改表中键的值。

我有一个数据库(如果相关的话,这是给Immich的)。请参阅下表的详细信息。我正在尝试将“library.watch.usePolling”从“true”修改为“false”。我正在使用这个命令并收到错误。我不确定这个错误意味着什么,也不知道我是否使用了正确的命令。我知道这肯定是一个简单的问题,但我是 PostgreSQL 的初学者。

UPDATE system_config
SET value = false
WHERE key = library.watch.usePolling
;
ERROR:  missing FROM-clause entry for table "watch"
LINE 3: WHERE key = library.watch.usePolling

这些是数据库中当前存在的表的详细信息。

\d+ system_config
                                               Table "public.system_config"
     Column |       Type        | Collation | Nullable | Default | Storage  | Compression | Stats target | Description 
    --------+-------------------+-----------+----------+---------+----------+-------------+--------------+-------------
     key    | character varying |           | not null |         | extended |             |              | 
     value  | character varying |           |          |         | extended |             |              | 
    Indexes:
        "PK_aab69295b445016f56731f4d535" PRIMARY KEY, btree (key)
    Access method: heap
SELECT * from "system_config"; 
                 key                 |     value     
-------------------------------------+---------------
 ffmpeg.transcode                    | "disabled"
 job.objectTagging.concurrency       | 4
 job.clipEncoding.concurrency        | 4
 job.sidecar.concurrency             | 4
 job.migration.concurrency           | 4
 job.library.concurrency             | 80
 job.thumbnailGeneration.concurrency | 20
 job.metadataExtraction.concurrency  | 50
 job.recognizeFaces.concurrency      | 6
 storageTemplate.enabled             | true
 ffmpeg.accel                        | "qsv"
 library.scan.cronExpression         | "0 */6 * * *"
 job.smartSearch.concurrency         | 60
 job.faceDetection.concurrency       | 60
 library.watch.enabled               | true
 library.watch.usePolling            | true
(16 rows)

注意:我也尝试过这个命令:

SET "system_config.value" = "false" WHERE "system_config.key" = "library.watch.usePolling";

我尝试了几种选择。主要在这里:

UPDATE system_config
SET value = false
WHERE key = library.watch.usePolling
;
ERROR:  missing FROM-clause entry for table "watch"
LINE 3: WHERE key = library.watch.usePolling

SET "system_config.value" = "false" WHERE "system_config.key" = "library.watch.usePolling";
ERROR:  syntax error at or near "WHERE"
LINE 1: SET "system_config.value" = "false" WHERE "system_config.key...
sql postgresql psql
1个回答
0
投票

对于初学者来说,我不会使用

key
value
作为字段名称 - 如果您查看 here,您会看到这两个单词都出现在该列表中。它们也出现在 PostgreSQL list 中(但作为非保留) - 再次,避免此列表中的任何单词 - 腰带和大括号!我建议您将字段名称更改为(类似)
sc_key
sc_value
- 这些也更有意义。

这里手册):

ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

所以,

ALTER TABLE system_config
RENAME COLUMN key TO sc_key;

value
也一样。

此外,重命名 -(手动 - 搜索

RENAME CONSTRAINT
PRIMARY KEY
- 告诉用户存在违反
PK_aab69295b445016f56731f4d535
的错误消息绝对没有意义 - 将其更改为类似
sc_pk 的内容
(或
system_config_pk
)。

顺便说一句,永远不需要(双倍)引用您的标识符(例如表、列或约束)名称除非出于某种原因,您希望(和/或)有义务尊重大小写。

如果没有,我的建议是对所有内容都使用snake_case(小写并用下划线分隔单词以使其可读)。互联网上有各种 SQL 风格指南(这个很好) - 但选择一种风格并坚持下去 - 这方面的一致性有助于易读性并使调试更容易。

运行几个查询来仔细检查我们的更改(找到代码here&L):

现在,回答你的问题。

双引号用于标识符(表名和列名) - 要指定字符串(在本例中为

CHARACTER VARYING
),您可以使用 单引号

为了解决您的问题,我执行了以下操作:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.