One last remark: I realize you're looking for a way to keep your city concept both alive and realistic, so suppose the following scenario. What if the river only just reached the bedrock, and the bedrock turned out to be both very horizontal and very large in area (so the river can't pool up behind it, nor can it flow around it). That would leave the river with only one choice: flow over the surface of the bedrock.

There's one problem with that scenario, however. A bedrock like that would most probably be sedimented seabed which was subsequently petrified and by some miracle remained horizontal instead of curling up under the geological conditions that are normally bound to happen in the timeframe necessary for a sediment to petrify. Even if you believe this unlikely (but possible) scenario, the bedrock would have no spikes whatsoever, since sand/silt/clay simply doesn't sediment that way. It sediments in smooth, nicely horizontal layers. A river meeting such a bedrock would suddenly meet a strong vertical resistance, and would therefor start eroding its own banks, resulting in a very wide, very shallow river - and that over a pretty long distance (remember, we're talking about a very large area of bedrock). Totally unnavigable, that is.

So yeah, that scenario wouldn't work either. Water's a pain in the ass, it almost never does what you want it to do. Think of choppy waters and it will almost always be a very temporary situation - far shorter than it would take a city to develop on its banks.