Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres table column name restrictions?

I did this in psql:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT, ip TEXT); 

I get

ERROR:  syntax error at or near "user" LINE 1: ...BLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT,... 

I do:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, userd TEXT, ip TEXT); 

It works.
Note the userd instead of user.

Are there some restrictions on the column names that a table can have? (postgresql v9.1.3)

like image 720
resting Avatar asked Jun 05 '12 03:06

resting


People also ask

Can column name have space in PostgreSQL?

It is acceptable to use spaces when you are aliasing a column name. However, it is not generally good practice to use spaces when you are aliasing a table name. The alias_name is only valid within the scope of the SQL statement.

How do you name columns in PostgreSQL?

The syntax to rename a column in a table in PostgreSQL (using the ALTER TABLE statement) is: ALTER TABLE table_name RENAME COLUMN old_name TO new_name; table_name.

Are Postgres column names case sensitive?

Postgres stores unquoted column names in lowercase. The column names in a select statement are not case sensitive unless quoted.

Can you rename a column in PostgreSQL?

In PostgreSQL, the RENAME COLUMN clause is used with the ALTER TABLE statement to rename one or more columns in a table.


2 Answers

Here's a nice table of reserved words in PostgreSQL:
http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

It is probably best to simply avoid using those words as table- or column-names.
An alternative, however, is to enclose the identifier in double-quotes, e.g.:

CREATE TABLE IF NOT EXISTS apiss (     skey TEXT,      time INTEGER,      "user" TEXT,      ip TEXT); 

Additionally, Postgres reserves system column names for internal use in every table: "Every table has several system columns that are implicitly defined by the system. Therefore, these names cannot be used as names of user-defined columns."

https://www.postgresql.org/docs/current/ddl-system-columns.html

like image 171
mechanical_meat Avatar answered Sep 20 '22 19:09

mechanical_meat


In my company, I had to scan an entire database for reserved words. I solved the task with the help of

select * from pg_get_keywords() 
like image 32
R13e Avatar answered Sep 19 '22 19:09

R13e