July 6, 2024 By Matthew Rathbone *

To drop a sequence in PostgreSQL, you use the DROP SEQUENCE command followed by the sequence name. This statement removes a sequence from the database.

Syntax:

DROP SEQUENCE [IF EXISTS] sequence_name [CASCADE | RESTRICT];
  • IF EXISTS: Prevents an error from being thrown if the sequence does not exist.
  • CASCADE: Automatically drops objects that depend on the sequence.
  • RESTRICT: Refuses to drop the sequence if there are any dependent objects.

Example: Dropping a Sequence:

DROP SEQUENCE seq_example;

Expected Output:

DROP SEQUENCE

A Database Manager That Is Modern, Fast, & Easy To Use

Tried a few tools. Beekeeper was the only one that I found that felt right. Most had a very 1990's feel to them - Allan

I built Beekeeper Studio because, like Allan, I wanted something more intuitive and modern than all the existing clunky apps I could find. My customers agree - they love using Beekeeper and they tell me every day! Give it a try, I bet you'll like it too.

Beekeeper's Linux version is 100% full-featured, no cut corners, no feature compromises.

Why You Might Need to Drop a Sequence

Sequences are commonly used in PostgreSQL for generating unique identifiers. However, there may come a time when you need to drop a sequence. This tutorial will guide you through the process of dropping a sequence in PostgreSQL, explaining each step with practical code examples and expected outputs.

Scenarios where you might need to drop a sequence:

  • Redundant Sequences: When sequences are no longer being used.
  • Schema Design Changes: When modifications in the database schema render certain sequences obsolete.
  • Data Integrity: To avoid confusion or potential data integrity problems with outdated sequences.

Prerequisites

Make sure your PostgreSQL environment is set up and you have the necessary permissions to drop sequences. You need to have DROP privilege on the sequence to drop it.

Checking Existing Sequences

Before dropping a sequence, it’s helpful to list the existing sequences in your database.

SELECT sequence_name
FROM information_schema.sequences
WHERE sequence_schema = 'public';

Expected Output:

 sequence_name 
---------------
 seq_example
 other_sequence
(2 rows)

This output confirms that the sequence my_sequence has been successfully dropped.

Conditional Drop: IF EXISTS

Using the IF EXISTS clause prevents errors when the sequence does not exist. This is particularly useful in scripts where the presence of the sequence is not guaranteed.

DROP SEQUENCE IF EXISTS seq_example;

Expected Output:

DROP SEQUENCE

Dropping Multiple Sequences

You can drop multiple sequences in a single command by separating their names with commas.

DROP SEQUENCE IF EXISTS seq_example, other_sequence;

Expected Output:

DROP SEQUENCE

Handling Dependencies

If the sequence is being used by a table, you might encounter a dependency error. For instance:

CREATE TABLE test_table (
    id SERIAL PRIMARY KEY
);

Here, PostgreSQL creates a sequence named test_table_id_seq for the SERIAL column. Dropping this sequence without considering dependencies will result in an error.

DROP SEQUENCE test_table_id_seq;

Expected Error:

ERROR:  cannot drop sequence test_table_id_seq because table test_table column id depends on it
HINT:  Use CASCADE to drop the sequence and all objects that depend on it.

CASCADE Option

To drop the sequence and all dependent objects, you can choose the CASCADE option.

DROP SEQUENCE test_table_id_seq CASCADE;

RESTRICT Option

On the other hand, if you want to avoid accidentally dropping dependent objects, you can use the RESTRICT option. This will prevent the sequence from being dropped if any dependencies exist.

DROP SEQUENCE IF EXISTS seq_example RESTRICT;

Expected Output:

If dependencies exist:

ERROR:  cannot drop sequence seq_example because other objects depend on it

If no dependencies:

DROP SEQUENCE

Verifying Sequence Deletion

After dropping a sequence, you can verify its deletion by listing sequences again:

SELECT sequence_name
FROM information_schema.sequences
WHERE sequence_schema = 'public';

Expected Output:

 sequence_name 
---------------
 another_sequence
(1 row)

In this example, my_sequence has been successfully removed from the list.

Conclusion

Dropping a sequence in PostgreSQL is straightforward with the DROP SEQUENCE command. Remember to handle dependencies carfully. Use the IF EXISTS clause to avoid errors when the sequence might not be present, and decide between CASCADE and RESTRICT based on whether you want to drop dependent objects.

By following these guidelines and examples, you should be able to manage sequences in your PostgreSQL database. For more detailed information, refer to the PostgreSQL documentation.

Other articles you may like: