본래 고구려와 발해의 땅이었는데, 당시의 명칭은 확실하지 않다. 고려 초에 이 곳에 신도군(信都郡 : 일설에는 古德縣이라고도 함.)을 두고, 온홀(溫忽, 또는 濕忽)에 성을 쌓아 가주(嘉州)로 승격시켰다.
대부분의 지역이 충적평야와 구릉지로 되어 있으며, 청천강과 대령강 하구 연안에는 100㎢ 의 넓은 평야인 박천벌이 있다.
1231년(고종 18)에 몽고병을 피하여 섬으로 피난했다가 1261년(원종 2)에 돌아왔다. 이 때 태주(太州 : 지금의 泰川)·박주(博州 : 지금의 博川)·무주(撫州 : 지금의 寧邊)·위주(渭州 : 지금의 渭原)를 모두 가주에 붙여 이 곳 수령이 5성을 다스렸다.
뒤에 태주·무주·위주를 분리하였고, 원나라의 지배 하에서는 동녕로총관(東寧路摠管)의 관할하에 있었다. 1278년(충렬왕 4)에 원나라로부터 되찾았고, 1371년(공민왕 20)에 박주를 독립시켰다. 조선 태종 때 가산군(嘉山郡)이 되었고, 1914년 행정구역개편 때 박천군에 합쳐 가산면이 되었다.
조선 말기 홍경래(洪景來)의 난의 시발지로 가산성이 한때 점령당한 적이 있었다.
고려시대에는 이곳이 국경지대이어서 군사적으로 중요시되던 곳이었고, 조선시대에는 서울과 의주를 연결하는 교통의 요지로 중요시되던 곳이었다. 당시에는 봉두산(鳳頭山)에 옛 성이 있었고 망해산봉수(望海山烽燧)와 가평역(嘉平驛)·산창(山倉) 등의 시설이 있었다.→박천군