type rails postgres conectar con column ruby-on-rails ruby postgresql activerecord plpgsql

ruby on rails - rails - ERROR: debe ser dueño del lenguaje plpgsql



rails postgresql jsonb (5)

La solución fue la siguiente:

En mi instalación, hay plantillas estándar template0 y template1 - al menos, según entiendo, postgres buscará la templateN número más alto al crear una nueva base de datos, a menos que se especifique la plantilla.

En este caso, como template0 incluía plpgsql , también lo hizo template1 ... la idea es personalizar la template1 para plpgsql necesidades predeterminadas específicas de su sitio, y en el caso de que explotara todo, restauraría la template1 de template0 .

Como mi requisito específico del sitio era instalar plpgsql como parte de la compilación automatizada de mi aplicación web (un paso que teníamos que mantener para mantener la compatibilidad con 8.4), la solución fue fácil: eliminar plpgsql de la template1 y la advertencia / error desapareció.

En el caso de que los valores predeterminados específicos del sitio cambien y de que tengamos que volver al comportamiento predeterminado, simplemente eliminaríamos template1 y lo recrearíamos (lo que usaría template0 )

Estoy utilizando PostgreSQL v9.0.1 con Rails (y es deps) @ v2.3.8 , debido al uso de la capacidad de texto completo de postgres, tengo una tabla que se define como:

CREATE TABLE affiliate_products ( id integer NOT NULL, name character varying(255), model character varying(255), description text, price numeric(9,2), created_at timestamp without time zone, updated_at timestamp without time zone, textsearch_vector tsvector, );

Tenga en cuenta la última línea, esto asegura que el registro activo no puede procesarlo con el volcador de esquema estándar, por lo que tengo que configurar config.active_record.schema_format = :sql in ./config/environment.rb ; y use rake db:test:clone_structure lugar de rake db:test:clone .

Nada de esto es demasiado notable, solo inconveniente, sin embargo, rake db:test:clone_structure falla con el error:

ERROR: must be owner of language plpgsql

Debido a la línea #16 en mi resultante ./db/development_schema.sql :

CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;

En PostgreSQL v9.0+ el plpsql instala el lenguaje plpsql en la plantilla inicial, que luego está disponible para el esquema recién creado.

No puedo ejecutar pruebas en este proyecto sin resolver esto, e incluso la edición manual de ./db/development_schema.sql es inútil ya que se regenera cada vez que ejecuto rake db:test:clone_structure (e ignorado por rake db:test:clone ).

Espero que alguien pueda arrojar algo de luz sobre esto?

Nota: He utilizado tanto la gema adaptadora de la pg 0.9.0 como la gema postgres en la versión 0.7.9.2008.01.28 , ambas muestran un comportamiento idéntico.

Mis compañeros de equipo ejecutan PostgreSQL v8.4 donde la instalación del idioma es un paso manual.


Me encontré con este error al intentar hacer RAILS_ENV=development bundle exec rake db:reset . Pude lograr lo mismo (para mis propósitos) haciendo RAILS_ENV=development bundle exec rake db:drop db:create db:migrate lugar.


Para los nuevos lectores, leí esta publicación anterior después de haber encontrado este error en uno de mis proyectos. Creo firmemente que dar a la aplicación PostgreSQL un rol de superusuario es una idea terrible y cambiar la plantilla tampoco es ideal. Dado que los comandos PSQL referenciados que son agregados por db:structure:dump no son necesarios para la base de datos de la aplicación Rails, he escrito una tarea de rake personalizada que comenta las líneas problemáticas en structure.sql. He compartido ese código públicamente en Github como Gist en https://gist.github.com/rietta/7898366 .


Simplemente filté las declaraciones de extensión plpgsql del archivo de estructura.sql post-dump:

# lib/tasks/db.rake namespace :db do desc "Fix ''ERROR: must be owner of extension plpgsql'' complaints from Postgresql" task :fix_psql_dump do |task| filename = ENV[''DB_STRUCTURE''] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql") sql = File.read(filename) sql.sub!(/(CREATE EXTENSION IF NOT EXISTS plpgsql)/, ''-- /1'') sql.sub!(/(COMMENT ON EXTENSION plpgsql)/, ''-- /1'') File.open(filename, ''w'') do |f| f.write(sql) end task.reenable end end Rake::Task["db:structure:dump"].enhance do Rake::Task["db:fix_psql_dump"].invoke end