Skip to content

Commit 4f8abdd

Browse files
committed
Escape column names
1 parent f891b99 commit 4f8abdd

File tree

1 file changed

+5
-103
lines changed

1 file changed

+5
-103
lines changed

target_postgres/db_sync.py

Lines changed: 5 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -9,102 +9,6 @@
99

1010
logger = singer.get_logger()
1111

12-
postgres_keywords = [k.lower() for k in [
13-
'ALL',
14-
'ANALYSE',
15-
'ANALYZE',
16-
'AND',
17-
'ANY',
18-
'ARRAY',
19-
'AS',
20-
'ASC',
21-
'ASYMMETRIC',
22-
'AUTHORIZATION',
23-
'BETWEEN',
24-
'BINARY',
25-
'BOTH',
26-
'CASE',
27-
'CAST',
28-
'CHECK',
29-
'COLLATE',
30-
'COLUMN',
31-
'CONSTRAINT',
32-
'CREATE',
33-
'CROSS',
34-
'CURRENT_DATE',
35-
'CURRENT_ROLE',
36-
'CURRENT_TIME',
37-
'CURRENT_TIMESTAMP',
38-
'CURRENT_USER',
39-
'DEFAULT',
40-
'DEFERRABLE',
41-
'DESC',
42-
'DISTINCT',
43-
'DO',
44-
'ELSE',
45-
'END',
46-
'EXCEPT',
47-
'FALSE',
48-
'FOR',
49-
'FOREIGN',
50-
'FREEZE',
51-
'FROM',
52-
'FULL',
53-
'GRANT',
54-
'GROUP',
55-
'HAVING',
56-
'ILIKE',
57-
'IN',
58-
'INITIALLY',
59-
'INNER',
60-
'INTERSECT',
61-
'INTO',
62-
'IS',
63-
'ISNULL',
64-
'JOIN',
65-
'LEADING',
66-
'LEFT',
67-
'LIKE',
68-
'LIMIT',
69-
'LOCALTIME',
70-
'LOCALTIMESTAMP',
71-
'NATURAL',
72-
'NEW',
73-
'NOT',
74-
'NOTNULL',
75-
'NULL',
76-
'OFF',
77-
'OFFSET',
78-
'OLD',
79-
'ON',
80-
'ONLY',
81-
'OR',
82-
'ORDER',
83-
'OUTER',
84-
'OVERLAPS',
85-
'PLACING',
86-
'PRIMARY',
87-
'REFERENCES',
88-
'RIGHT',
89-
'SELECT',
90-
'SESSION_USER',
91-
'SIMILAR',
92-
'SOME',
93-
'SYMMETRIC',
94-
'TABLE',
95-
'THEN',
96-
'TO',
97-
'TRAILING',
98-
'TRUE',
99-
'UNION',
100-
'UNIQUE',
101-
'USER',
102-
'USING',
103-
'VERBOSE',
104-
'WHEN',
105-
'WHERE'
106-
]]
107-
10812

10913
def column_type(schema_property):
11014
property_type = schema_property['type']
@@ -128,13 +32,11 @@ def inflect_column_name(name):
12832

12933

13034
def safe_column_name(name):
131-
if name.lower() in postgres_keywords:
132-
return '"{}"'.format(name)
133-
return name
35+
return '"{}"'.format(name)
13436

13537

13638
def column_clause(name, schema_property):
137-
return '{} {}'.format(name, column_type(schema_property))
39+
return '{} {}'.format(safe_column_name(name), column_type(schema_property))
13840

13941

14042
def flatten_key(k, parent_key, sep):
@@ -147,7 +49,7 @@ def flatten_key(k, parent_key, sep):
14749
(reduced_key if len(reduced_key) > 1 else inflected_key[reducer_index][0:3]).lower()
14850
reducer_index += 1
14951

150-
return safe_column_name(sep.join(inflected_key))
52+
return sep.join(inflected_key)
15153

15254

15355
def flatten_schema(d, parent_key=[], sep='__'):
@@ -188,7 +90,7 @@ def flatten_record(d, parent_key=[], sep='__'):
18890

18991

19092
def primary_column_names(stream_schema_message):
191-
return [inflect_column_name(p) for p in stream_schema_message['key_properties']]
93+
return [safe_column_name(inflect_column_name(p)) for p in stream_schema_message['key_properties']]
19294

19395

19496
class DbSync:
@@ -312,7 +214,7 @@ def drop_temp_table(self):
312214
return "DROP TABLE {}".format(temp_table)
313215

314216
def column_names(self):
315-
return [name for name in self.flatten_schema]
217+
return [safe_column_name(name) for name in self.flatten_schema]
316218

317219
def create_table_query(self, is_temporary=False):
318220
stream_schema_message = self.stream_schema_message

0 commit comments

Comments
 (0)