PostgreSQL: how can I shorten a multi-word string to few words?
Turn the sentence into an array, then pick the first three elements and concatenate them back to a single string: 

select array_to_string ((regexp_split_to_array(title, '\s+'))[1:3], ' ')
from book;


alternatively, just use split_part() three times: 

select split_part(title, ' ', 1)||
       split_part(title, ' ', 2)||  
       split_part(title, ' ', 3)
from book;


split_part() has the disadvantage, that you can't properly deal with multiple spaces between the words.