Fix
This commit is contained in:
68
water-api/sql/add_meter_project_relation.sql
Normal file
68
water-api/sql/add_meter_project_relation.sql
Normal file
@@ -0,0 +1,68 @@
|
||||
-- ============================================================================
|
||||
-- Add project_id column to meters table
|
||||
-- This establishes the relationship between meters and projects
|
||||
-- ============================================================================
|
||||
|
||||
-- Step 1: Add the column as nullable first (to allow existing data)
|
||||
ALTER TABLE meters
|
||||
ADD COLUMN IF NOT EXISTS project_id UUID;
|
||||
|
||||
-- Step 2: For existing meters without project_id, try to get it from their concentrator
|
||||
UPDATE meters m
|
||||
SET project_id = c.project_id
|
||||
FROM concentrators c
|
||||
WHERE m.concentrator_id = c.id
|
||||
AND m.project_id IS NULL
|
||||
AND m.concentrator_id IS NOT NULL;
|
||||
|
||||
-- Step 3: Add foreign key constraint
|
||||
ALTER TABLE meters
|
||||
DROP CONSTRAINT IF EXISTS meters_project_id_fkey;
|
||||
|
||||
ALTER TABLE meters
|
||||
ADD CONSTRAINT meters_project_id_fkey
|
||||
FOREIGN KEY (project_id)
|
||||
REFERENCES projects(id)
|
||||
ON DELETE CASCADE;
|
||||
|
||||
-- Step 4: Create index for better query performance
|
||||
CREATE INDEX IF NOT EXISTS idx_meters_project_id ON meters(project_id);
|
||||
|
||||
-- Step 5: Add comment for documentation
|
||||
COMMENT ON COLUMN meters.project_id IS 'Project to which this meter belongs';
|
||||
|
||||
-- ============================================================================
|
||||
-- Verify the changes
|
||||
-- ============================================================================
|
||||
|
||||
-- Check if the column was added
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'meters'
|
||||
AND column_name = 'project_id';
|
||||
|
||||
-- Check the constraint
|
||||
SELECT
|
||||
conname AS constraint_name,
|
||||
contype AS constraint_type,
|
||||
pg_get_constraintdef(oid) AS constraint_definition
|
||||
FROM pg_constraint
|
||||
WHERE conrelid = 'meters'::regclass
|
||||
AND conname LIKE '%project_id%';
|
||||
|
||||
-- Show meters with their project info
|
||||
SELECT
|
||||
m.id,
|
||||
m.name,
|
||||
m.serial_number,
|
||||
m.project_id,
|
||||
p.name AS project_name,
|
||||
c.name AS concentrator_name
|
||||
FROM meters m
|
||||
LEFT JOIN projects p ON m.project_id = p.id
|
||||
LEFT JOIN concentrators c ON m.concentrator_id = c.id
|
||||
LIMIT 10;
|
||||
Reference in New Issue
Block a user