Paul Lefebvre
Posted on February 13, 2018
I’ve ran into PostgreSQL case sensitivity myself before and I’ve had plenty of people ask me about it, so I thought it might be a good thing to bring up here.
Sometimes you hear that PostgreSQL is case-insensitive, but it isn’t really. What it actually does is convert your table and column names to lowercase by default. So take a look at this SQL:
SELECT FullName FROM Person
PostgreSQL actually converts it to this:
SELECT fullname FROM person
That is nice if you happen to like to write your queries with mixed casing.
But you’ll start to run into a problem if you’ve actually created the table and columns using case-sensitive names, which happens when you use quotes around the names. For example, consider these SQL CREATE statements:
CREATE TABLE person (fullname VARCHAR(100), address VARCHAR(100))
CREATE TABLE Person (FullName VARCHAR(100), Address VARCHAR(100))
CREATE TABLE "Person" ("FullName" VARCHAR(100), "Address" VARCHAR(100))
In the first two examples, you get a table called “person“ with two columns called “fullname“ and “address”. That may not be obvious in the second example since the names are not lowercase, but remember that PostgreSQL converts your SQL to lowercase for you.
In the last example, the names are in quotes so their case is maintained. This means you’ll get a table called “Person“ with two columns called “FullName“ and “Address”. Now what happens if you try to run a query with a table called “Person”? Well, using SQL like this:
SELECT FullName FROM Person
you’ll get a syntax error:
ERROR: relation “person does not exist
LINE 1: SELECT FullName FROM Person
This is because PostgreSQL is converting “Person to “person”, but there is no table called “person”. It is actually called “Person”.
To avoid this error you instead have to write the SQL with quotes like this:
SELECT "FullName" FROM "Person"
Obviously that can start to become a bit of a pain, so the moral of the story is don’t use quotes when creating tables or writing SQL queries so that everything is created as lowercase and things will work like you probably expect. You’ll especially want to pay attention to any tools you use to create SQL for you. If you use a tool’s UI to create a table and have a habit of typing in mixed case, the tool might generate SQL (or even the table itself) for you using quotes, which as you can see could mess you up later.
This post originally appeared on the Xojo Blog.
Posted on February 13, 2018
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024
November 29, 2024
November 29, 2024
November 28, 2024