opencybersecurityalliance / firepit

Firepit - STIX Columnar Storage
Apache License 2.0
15 stars 12 forks source link

DependentObjectsStillExist: cannot drop view because other objects depend on it #52

Closed pcoccoli closed 2 years ago

pcoccoli commented 2 years ago

Found while testing Kestrel with PostgreSQL:

  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 419, in assign
    self.assign_query(viewname, query)
  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 799, in assign_query
    cursor = self._create_view(viewname, stmt, sco_type, deps=deps)
  File "/home/pcoccoli/github/firepit/firepit/pgstorage.py", line 333, in _create_view
    self._execute(f'DROP VIEW IF EXISTS "{viewname}"', cursor)
  File "/home/pcoccoli/github/firepit/firepit/sqlstorage.py", line 152, in _execute
    cursor.execute(statement)
  File "/home/pcoccoli/.pyenv/versions/3.9.2/envs/p392/lib/python3.9/site-packages/psycopg2_binary-2.8.6-py3.9-linux-x86_64.egg/psycopg2/extras.py", line 251, in execute
    return super(RealDictCursor, self).execute(query, vars)
psycopg2.errors.DependentObjectsStillExist: cannot drop view conns because other objects depend on it
DETAIL:  view ts_conns depends on view conns
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

Does not happen on sqlite3.

Can reproduce with this Kestrel script:

# Create var
conns = GET network-traffic
        FROM file:///home/pcoccoli/Data/THL/dns_tunneling.json
    WHERE [network-traffic:dst_port = 53 AND network-traffic:dst_ref.value NOT ISSUBSET '192.168.1.0/24']

# Create dependent var
ts_conns = TIMESTAMPED(conns)

# Now try to recreate original var
conns = SORT conns BY src_port