This paper addresses the short-term berth planning and ship scheduling issues for a busy seaport with channel restrictions, in which the channel width of the port can accommodate one large-sized ship only or two small-sized ships in its two-way navigation (inbound and outbound). A mixed integer linear programming (MILP) model is presented, in which the inbound/outbound movements of ships between multiple anchorages and multiple basins, and the shifting movements of ships between or within the harbor basins are explicitly taken into account. In view that the MILP model is usually computationally low-efficient for practical large-sized problems, we reformulate the MILP into an equivalent set-partitioning model and develop a column generation (CG) algorithm to solve this model. Several efficient methods are also proposed to improve the performance of the CG algorithm. The computational experiments for a real Chinese port show that the proposed CG algorithm significantly outperforms some existing methods (e.g., branch-and-cut and truncated column generation) and the port scheduling schemes adopted in reality. It can solve the instances with up to 35 inbound ships, 35 outbound ships, 6 shifting ships, and 43 berths within ten minutes, with an average optimality gap of 0.32%. Managerial insights for the port operators are also provided to guide the operations and management of the ports with channel restrictions.