-- 프록시 포트(=IP 세션) 임대 장부 — 프로세스 간 공유 상태. -- 한 DECODO 계정을 여러 워커 프로세스가 나눠 쓰므로 임대·휴식·쿨다운을 DB 에 둔다. -- (인메모리면 서로의 차단을 몰라 같은 IP 를 동시에 잡거나 태운 IP 를 곧바로 재사용한다) CREATE TABLE IF NOT EXISTS proxy_port ( host varchar(80) NOT NULL, -- 게이트웨이(gate/kr — 같은 번호라도 IP 가 다름) port integer NOT NULL, owner varchar(80), -- 현재 임대자(소스-PID-워커) leased_until timestamptz, -- 임대 만료(=sticky 수명). 프로세스가 죽어도 자동 회수 rest_until timestamptz, -- 휴식 만료(선제 회전 — 탄 게 아님) cooldown_until timestamptz, -- 쿨다운 만료(차단) last_used_at timestamptz, -- 마지막 임대 시각(LRU 회전 기준) last_reason varchar(40), use_count integer NOT NULL DEFAULT 0, burn_count integer NOT NULL DEFAULT 0, -- 누적 차단(불량 IP 슬롯 식별) updated_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (host, port) ); CREATE INDEX IF NOT EXISTS ix_proxy_port_pick ON proxy_port (host, last_used_at);