【问题标题】:Is there a way for Postgres to overwrite one column if the other column is true?如果另一列为真,Postgres 有没有办法覆盖一列?
【发布时间】:2016-11-26 04:44:42
【问题描述】:

我有一个Comment 表,我不想删除它,而只是覆盖数据以破坏其中的信息。

我想添加一个布尔值is_deleted?,如果它等于true,让它用“此评论已被删除”覆盖:body 列,以便“删除”它但保留我需要的其他数据为了维护关系。

有没有办法用 Postgres 做这样的事情?或者是写一个ruby方法来覆盖数据的唯一解决方案?

【问题讨论】:

    标签: sql ruby-on-rails postgresql


    【解决方案1】:

    我认为一个简单的方法是使用视图:

    create view v_table as
        select . . .,
               (case when is_deleted then 'This comment has been deleted'
                     else comment
                end) as comment
        from t;
    

    然后查询视图而不是表以获得您想要的行为。

    【讨论】:

    • SQL 对我来说有点神秘。您能否进一步解释一下这是在做什么以及如何实现它?
    • @Antonio 。 . .我不确定需要解释什么。视图是一种预先打包查询结果集的方式,因此您可以像使用表一样使用它。答案给出了视图的定义(. . . 代表表中的所有其他列)。
    • 我以非常标准的方式使用过 Rails 和 postgres,因此我从未使用过 postgres“视图”。我猜我会以某种方法实现你的代码?
    • @Antonio 。 . .您的问题被标记为 Postgres。视图是 Postgres(或任何数据库)的基本部分。您在数据库中创建视图:postgresql.org/docs/current/static/sql-createview.html.
    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2012-03-29
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多