"UPDATE table_name SET w = $1, x = $2, z = $4 WHERE y = $3 RETURNING *",

does not do the same as

"UPDATE table_name SET w = $1, x = $2, y = $3, z = $4 RETURNING *",

It’s 2 am and my mind blanked out the WHERE, and just wanted the numbers neatly in order of 1234.

idiot.

FML.

    • Caveman
      link
      fedilink
      11 year ago

      Raw dog is the fastest way to finish a task.

      • productivity
      • risk

      It’s a trade-off

    • @XTornado@lemmy.ml
      link
      fedilink
      21 year ago

      But the adrenaline man… some of us are jonkies of adrenaline but we are too afraid of anything more of physically dangerous…

  • Bappity
    link
    fedilink
    English
    12
    edit-2
    1 year ago

    who thought it was a good idea to make the where condition in SQL syntax only correct after the set?? disaster waiting to happen

  • agilob
    link
    fedilink
    English
    30
    edit-2
    1 year ago

    All (doesn’t seem like MsSQL supports it, I thought that’s a pretty basic feature) databases have special configuration that warn or throw error when you try to UPDATE or DELETE without WHERE. Use it.

    • @MajorHavoc@lemmy.world
      link
      fedilink
      41 year ago

      I still remember that time (hours ago) when “fake your own death” was the top voted recommendation for recovering from a SQL mistake.

  • SuperFola
    link
    fedilink
    English
    171 year ago

    There is still the journal you could use to recover the old state of your database. I assume you commited after your update query, thus you would need to copy first the journal, remove the updates from it, and reconstruct the db from the altered journal.

    This might be harder than what I’m saying and heavily depends on which db you used, but if it was a transactional one it has to have a journal (not sure about nosql ones).

    • @drekly@lemmy.worldOP
      link
      fedilink
      English
      41 year ago

      It is after the event that I find that postgres’ WAL journalling is off by default 🙃

    • @ck_@discuss.tchncs.de
      link
      fedilink
      31 year ago

      If coffee simply does not get you out of bed in the mornings any more, you need to find your fix elsewhere 💁

  • @rodolfo@lemmy.world
    link
    fedilink
    81 year ago

    you could use dbeaver that warns you for update and delete queries without a where clause, independently of the db system. I hope the functionality it’s still there since, for totally unrelated motivations, I always use a where clause, even when buying groceries.

  • AlphaOmega
    link
    fedilink
    80
    edit-2
    1 year ago

    This is a hard lesson to learn. From now on, my guess is you will have dozens of backups.

    • @kucing@lemmy.ml
      link
      fedilink
      91 year ago

      I’ve read something like “there are two kinds of people: those who backup and those who are about to”

      • @sim642@lemm.ee
        link
        fedilink
        71 year ago

        Transactions aren’t backups. You can just as easily commit before fully realizing it. Backups, backups, backups.

    • @marcos@lemmy.world
      link
      fedilink
      501 year ago

      And a development environment. And not touch production without running the exact code at least once and being well slept.

          • @snail_hatan@lemmy.ml
            link
            fedilink
            41 year ago

            Totally right! You must set yourself up so a fool can run in prod and produce the expected result. Which is the purpose of a test env.

        • @snail_hatan@lemmy.ml
          link
          fedilink
          1
          edit-2
          1 year ago

          Replied hastily, but the way to run db statements in prod while dealing with sleep deprivation and drinking too much is to run it a bunch in several test env scenarios so you’re just copy pasting to prod and it CAN confidently be done. Also enable transactions and determine several, valid smoke tests.

          Edit: a -> several

    • @Aurenkin@sh.itjust.works
      link
      fedilink
      171 year ago

      Completely agree, transactions are amazing for this kind of thing. In a previous team we also had a policy of always pairing if you need to do any db surgery in prod so you have a second pair of eyes + rubber duck to explain what you’re doing.

  • @originalfrozenbanana@lemm.ee
    link
    fedilink
    English
    621 year ago

    This doesn’t help you but may help others. I always run my updates and deletes as selects first, validate the results are what I want including their number and then change the select to delete, update, whatever

    • @NOPper@lemmy.world
      link
      fedilink
      161 year ago

      I learned this one very early on in my career as a physical security engineer working with access control databases. You only do it to one customer ever. 🤷‍♂️

  • @Jambone@lemmy.world
    link
    fedilink
    111 year ago

    In MSSQL, you can do a BEGIN TRAN before your UPDATE statement.

    Then if the number of affected rows is not about what you’d expect, doing a ROLLBACK would undo the changes.

    If the number of affected rows did look about right, doing a COMMIT would make the changes permanent.

    • @lobut@lemmy.ca
      link
      fedilink
      21 year ago

      Yup, exact tip I was gonna write!

      I have them commented out and highlight the COMMIT when I’m ready.

  • @TeenieBopper@lemmy.world
    link
    fedilink
    221 year ago

    I once dropped a table in a production database.

    I never should have had write permissions on that database. You can bet they changed that when clinicians had to redo four days of work because the hosting company or whatever only had weekly backups, not daily.

    So, I feel your pain.

  • @Malfeasant@lemm.ee
    link
    fedilink
    101 year ago

    I watched someone make this mistake during a screen share, she hit execute and I screamed “wait! You forgot the where!” Fortunately, it was such a huge database that SQL spun for a moment I guess deciding how it was going to do it before actually doing it, she was able to cancel it and ran a couple checks to confirm it hadn’t actually changed anything yet. I don’t think anything computer related has ever gotten my adrenaline going like that before or since