30 lines
1022 B
Python
30 lines
1022 B
Python
|
from dbt.adapters.base import Column
|
||
|
from dataclasses import dataclass
|
||
|
from dbt.adapters.base.relation import BaseRelation
|
||
|
from dbt.exceptions import RuntimeException
|
||
|
|
||
|
|
||
|
@dataclass(frozen=True, eq=False, repr=False)
|
||
|
class PostgresRelation(BaseRelation):
|
||
|
def __post_init__(self):
|
||
|
# Check for length of Postgres table/view names.
|
||
|
# Check self.type to exclude test relation identifiers
|
||
|
if (self.identifier is not None and self.type is not None and
|
||
|
len(self.identifier) > self.relation_max_name_length()):
|
||
|
raise RuntimeException(
|
||
|
f"Relation name '{self.identifier}' "
|
||
|
f"is longer than {self.relation_max_name_length()} characters"
|
||
|
)
|
||
|
|
||
|
def relation_max_name_length(self):
|
||
|
return 63
|
||
|
|
||
|
|
||
|
class PostgresColumn(Column):
|
||
|
@property
|
||
|
def data_type(self):
|
||
|
# on postgres, do not convert 'text' to 'varchar()'
|
||
|
if self.dtype.lower() == 'text':
|
||
|
return self.dtype
|
||
|
return super().data_type
|