Skip to content
go-jet edited this page Jul 17, 2019 · 3 revisions

DELETE statement deletes rows that satisfy the WHERE clause from the specified table. More about delete statement in PostgreSQL: https://www.postgresql.org/docs/11/sql-delete.html

Following clauses are supported:

  • WHERE(delete_condition) - Only rows for which delete condition returns true will be deleted.
  • RETURNING(output_expression...) - An expressions to be computed and returned by the DELETE command after each row is deleted. The expression can use any column names of the table. Write TableName.AllColumns to return all columns.

Example

// delete all links with name 'Gmail' and 'Outlook'
deleteStmt := Link.
    DELETE().
    WHERE(Link.Name.IN(String("Gmail"), String("Outlook")))

Debug sql of above statement:

DELETE FROM test_sample.link      -- test_sample is name of the schema
WHERE link.name IN ('Gmail', 'Outlook');

Execute statement

To execute delete statement and get sql.Result:

res, err := deleteStmt.Exec(db)

To execute delete statement and return records deleted, delete statement has to have RETURNING clause:

deleteStmt := Link.
    DELETE().
    WHERE(Link.Name.IN(String("Gmail"), String("Outlook"))).
    RETURNING(Link.AllColumns)
    
dest := []model.Link{}

err := deleteStmt.Query(db, &dest)
    

Use ExecContext and QueryContext to provide context object to execution.

SQL table used for the example:
CREATE TABLE IF NOT EXISTS link (
    id serial PRIMARY KEY,
    url VARCHAR (255) NOT NULL,
    name VARCHAR (255) NOT NULL,
    description VARCHAR (255)
);