Can I feed some SQL that creates a view to Slony?

I have some SQL that does CREATE OR REPLACE VIEW name_of_view and so on, passes it to slonik_execute_script, and then tries to run slonik_create_set for a temporary Slony set containing only that view.

I get rejected with ERROR: Slony-I: table "public"."name_of_view" has no primary key error. To my knowledge, views don't support primary keys.

Does this mean there is no way, using the Slony admin scripts, to add a view to replication, and that I should just install it manually on all members of my replication cluster?

2 Answers 2


Slony is trigger based. Since you cannot have triggers on views you can not use Slony to replicate views.

However, you can achieve the desired effect by using Slony to replicate the tables used by your views and duplicate the view definitions on your slave servers.


According to the docs only ordinary tables are supported:

Slony-I: setAddTable_int(): public.my_view is not a regular table You can only replicate (at least, using SET ADD TABLE) objects that are ordinary tables. That doesn't include views or indexes. (Indexes can come along for the ride, but you don't ask to replicate an index...)


There is a check in the code to enforce this http://slony.info/documentation/function.setaddtable-int-integer-integer-text-name-text.html.

The error message you get seems correct as I assume you haven't specified any primary or unique key in slon_tools.conf for the view. But what if you actually specify a primary or unique key - which must be a column returned by the view? Then I would expect slonik_create_set to pass the primary/unique key check and instead fail with the error:

Slony-I: setAddTable_int(): "public"."my_name_of_view" is not a regular table

That is my 2 cents.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.