Explain Codes LogoExplain Codes Logo

Postgres Case Sensitivity

sql
best-practices
database-migration
case-sensitivity
Nikita BarsukovbyNikita Barsukov·Oct 29, 2024
TLDR

In PostgreSQL, names sans double quotes are treated as lowercase. If you encase the name with double quotes, eg. "Name", it'll be case-sensitive. Here's an illustration: SELECT * FROM "Users" versus SELECT * FROM users. The first query hunts for an exact match—even capital U matters, while the second is case indifferent.

Things you must know

While creating databases, remember:

  • Embrace lowercase names for consistency.
  • Use ALTER TABLE to rename entities in lowercase. This way, you ditch quotes.
  • When migrating, ensure identifiers in dump files are lowercased for flawless PostgreSQL adaptation.

Migrating from non-PostgreSQL databases

Moving data from MSSQL? You might need to modify your dump file:

  • Use the sed command to batch modify SQL files. But remember, you don't want to modify string literals. So, thread carefully.
  • Peek into MSSQL's export options. There might be a hidden passage to PostgreSQL-compatible dump creation.

Querying made easier

To escape the labyrinth of case sensitivity, I present to you the magic spell—always query in lowercase:

SELECT * FROM users WHERE username = 'john_doe'; -- 'John Doe' who?

Quoting in a query is like inviting trouble. Avoid it unless it's an absolute necessity.

Why it matters

If you think case sensitivity is a mere technicality, think again. It has tangible real-world implications:

  • Application code can bomb due to case mismatches.
  • Database migrations might lose data if case sensitivity isn't managed properly.
  • User queries can generate errors if case sensitivity isn't planned.

Do's and don'ts

To have a hassle-free journey with PostgreSQL, here're some best practices:

  • Stick to lowercase while naming tables and columns.
  • Implement a consistent formatting in your coding style guidelines.
  • Migrating? Test your application exhaustively to handle case sensitive data.

Troubleshooting 101

Stuck with case sensitivity issues?

  • Use ILIKE for case-insensitive searches.
  • Check constraints can enforce data case requirements.
  • Ensure application object-relational mapping (ORM) reflects schema changes.