add create/delete views

dev
timofejmalinin 2 years ago
parent 0cac7818fb
commit f07fc1dca9

@ -19,7 +19,7 @@ spec:
containers: containers:
- name: django - name: django
image: DEPLOY_IMAGE_TAG image: DEPLOY_IMAGE_TAG
command: ["sh", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:${DJANGO_PORT}"] command: ["sh", "-c", "python manage.py delete_views && python manage.py migrate && python manage.py create_views && python manage.py runserver 0.0.0.0:${DJANGO_PORT}"]
ports: ports:
- containerPort: 8000 - containerPort: 8000
name: django-port name: django-port

@ -0,0 +1,59 @@
from django.core.management.base import BaseCommand
from service.utils import run_sql_command, log_to_telegram
CMD_PIVOT_DIST = """CREATE OR REPLACE procedure pivot_dist()
--RETURNS SET OF record
AS $BODY$
DECLARE columnNames TEXT;
BEGIN
DROP VIEW IF EXISTS points_with_dist;
SELECT 'placement_point bigint, ' || string_agg(c, ', ') FROM (SELECT distinct pvz_postamates_group_id, 'd' || pvz_postamates_group_id || ' double precision' as c from service_placementpointpvzdistance order by 1) as asd
INTO columnNames;
EXECUTE format('CREATE OR REPLACE VIEW points_with_dist AS SELECT *
FROM CROSSTAB(
$$
SELECT placement_point_id, pvz_postamates_group_id, dist
FROM service_placementpointpvzdistance
ORDER BY 1, 2
$$
) AS ct(%s)
LEFT JOIN service_placementpoint ON placement_point_id=id'
,columnNames);
END;
$BODY$
LANGUAGE plpgsql;
CALL public.pivot_dist();"""
CMD_PIVOT_DIST_PRE = """CREATE OR REPLACE procedure prepivot_dist()
AS $BODY$
DECLARE columnNames TEXT;
BEGIN
DROP VIEW IF EXISTS prepoints_with_dist;
SELECT 'placement_point_id bigint, ' || string_agg(c, ', ') FROM (SELECT distinct pvz_postamates_group_id, 'd' || pvz_postamates_group_id || ' double precision' as c from service_preplacementpointpvzdistance order by 1) as asd
INTO columnNames;
EXECUTE format('CREATE OR REPLACE VIEW prepoints_with_dist AS SELECT *
FROM CROSSTAB(
$$
SELECT placement_point_id, pvz_postamates_group_id, dist
FROM service_preplacementpointpvzdistance
ORDER BY 1, 2
$$
) AS ct(%s)
LEFT JOIN service_preplacementpoint ON placement_point_id=id'
,columnNames);
END;
$BODY$
LANGUAGE plpgsql;
CALL public.prepivot_dist();"""
class Command(BaseCommand):
help = 'Create procedures'
def handle(self, *args, **kwargs):
try:
log_to_telegram('Creating views')
run_sql_command(CMD_PIVOT_DIST)
log_to_telegram('pivot_dist created')
run_sql_command(CMD_PIVOT_DIST_PRE)
log_to_telegram('prepivot_dist created')
except Exception as e:
log_to_telegram('Error creating views: ' + str(e))

@ -0,0 +1,18 @@
from django.core.management.base import BaseCommand
from service.utils import run_sql_command, log_to_telegram
CMD_PIVOT_DIST = """CALL public.pivot_dist();"""
CMD_PIVOT_DIST_PRE = """CALL public.prepivot_dist();"""
class Command(BaseCommand):
help = 'Create views'
def handle(self, *args, **kwargs):
try:
log_to_telegram('Creating views')
run_sql_command(CMD_PIVOT_DIST)
log_to_telegram('pivot_dist created')
run_sql_command(CMD_PIVOT_DIST_PRE)
log_to_telegram('prepivot_dist created')
except Exception as e:
log_to_telegram('Error creating views: ' + str(e))

@ -0,0 +1,18 @@
from django.core.management.base import BaseCommand
from service.utils import run_sql_command, log_to_telegram
CMD_PIVOT_DIST = """drop view points_with_dist;"""
CMD_PIVOT_DIST_PRE = """drop view prepoints_with_dist;"""
class Command(BaseCommand):
help = 'delete views'
def handle(self, *args, **kwargs):
try:
log_to_telegram('Deleting views')
run_sql_command(CMD_PIVOT_DIST)
log_to_telegram('pivot_dist deleted')
run_sql_command(CMD_PIVOT_DIST_PRE)
log_to_telegram('prepivot_dist deleted')
except Exception as e:
log_to_telegram('Error deleting views: ' + str(e))

@ -17,6 +17,20 @@ from rest_framework.viewsets import ReadOnlyModelViewSet
import psycopg2 import psycopg2
from postamates.settings import DB_URL from postamates.settings import DB_URL
def run_sql_command(command):
connection = psycopg2.connect(
DB_URL
)
try:
cursor = connection.cursor()
cursor.execute(command)
connection.commit()
except psycopg2.Error as e:
print("Error executing command:", e)
finally:
cursor.close()
connection.close()
def run_psql_command(): def run_psql_command():
connection = psycopg2.connect( connection = psycopg2.connect(

Loading…
Cancel
Save