След като си поиграх с нещата, разбрах какъв е проблемът:field.types
трябва да е NAMED списък вектор, а не просто списък; освен това имената на редовете не трябва да се включват, в противен случай имаме нужда от три типа полета. За горния пример, следното работи добре:
dbWriteTable(con, name="table_name", value=df,
field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)