Defect #22646
closedPostgreSQL: Exception in issue report view.
Added by Lars Kanis almost 9 years ago. Updated almost 9 years ago.
0%
Description
The following exception is raised, when viewing /projects/projektmanagement/issues/report on PostgreSQL:
ActiveRecord::StatementInvalid (PG::AmbiguousColumn: ERROR: column reference "status_id" is ambiguous LINE 1: SELECT COUNT(*) AS count_all, status_id AS status_id, is_clo... ^ : SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, tracker_id AS tracker_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "trackers" ON "trackers"."id" = "issues"."tracker_id" WHERE ((projects.id = 204) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."tracker_id"): app/models/issue.rb:1348:in `count_and_group_by' app/models/issue.rb:1305:in `by_tracker' app/controllers/reports_controller.rb:31:in `issue_report' lib/redmine/sudo_mode.rb:63:in `sudo_mode'
The attached patch fixes this.
Files
0001-PostgreSQL-Fix-Exception-in-issue-report-view.patch (1.61 KB) 0001-PostgreSQL-Fix-Exception-in-issue-report-view.patch | Lars Kanis, 2016-04-27 17:42 | ||
test-pg-9.5.log (19.2 KB) test-pg-9.5.log | Test master branch on PostgreSQL-9.5.2 | Lars Kanis, 2016-04-28 12:50 |
Updated by Toshi MARUYAMA almost 9 years ago
- Status changed from New to Needs feedback
I cannot reproduce on my vanilla Redmine 3.2.1 CentOS 6.
$ rpm -q postgresql postgresql-8.4.20-5.el6_7.x86_64 $ bundle show pg /home/xxxxx/.rvm/gems/ruby-1.9.3-p551/gems/pg-0.18.4
Started GET "/projects/ecookbook/issues/report" for 192.168.11.10 at 2016-04-28 01:40:47 +0900 Processing by ReportsController#issue_report as HTML Parameters: {"id"=>"ecookbook"} (0.4ms) SELECT MAX("settings"."updated_on") FROM "settings" User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('User', 'AnonymousUser') AND "users"."status" = $1 AND "users"."id" = $2 LIMIT 1 [["status", 1], ["id", 1]] Current user: admin (id=1) Setting Load (0.1ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "force_default_language_for_loggedin"]] Project Load (0.2ms) SELECT "projects".* FROM "projects" WHERE "projects"."identifier" = $1 LIMIT 1 [["identifier", "ecookbook"]] (0.1ms) SELECT "enabled_modules"."name" FROM "enabled_modules" WHERE "enabled_modules"."project_id" = $1 [["project_id", 1]] IssueStatus Load (0.3ms) SELECT "issue_statuses".* FROM "issue_statuses" ORDER BY "issue_statuses"."position" ASC Version Load (0.9ms) SELECT "versions".* FROM "versions" INNER JOIN "projects" ON "projects"."id" = "versions"."project_id" WHERE (projects.id = 1 OR (projects.status <> 9 AND ( versions.sharing = 'system' OR (projects.lft >= 1 AND projects.rgt <= 10 AND versions.sharing = 'tree') OR (projects.lft < 1 AND projects.rgt > 10 AND versions.sharing IN ('hierarchy', 'descendants')) OR (projects.lft > 1 AND projects.rgt < 10 AND versions.sharing = 'hierarchy')))) Project Load (0.3ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 2, 3, 5) IssuePriority Load (0.4ms) SELECT "enumerations".* FROM "enumerations" WHERE "enumerations"."type" IN ('IssuePriority') ORDER BY "enumerations"."position" ASC Setting Load (0.1ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "issue_group_assignment"]] User Load (0.2ms) SELECT DISTINCT "users".* FROM "users" INNER JOIN "members" ON "members"."user_id" = "users"."id" WHERE "users"."type" IN ('User', 'AnonymousUser') AND "users"."status" = $1 AND (members.project_id = 1) [["status", 1]] Setting Load (0.1ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "user_format"]] (1.4ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, tracker_id AS tracker_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "trackers" ON "trackers"."id" = "issues"."tracker_id" WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."tracker_id" (1.0ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, fixed_version_id AS fixed_version_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "versions" ON "versions"."id" = "issues"."fixed_version_id" WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."fixed_version_id" (1.0ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, priority_id AS priority_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "enumerations" ON "enumerations"."id" = "issues"."priority_id" AND "enumerations"."type" IN ('IssuePriority') WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."priority_id" (1.0ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, category_id AS category_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "issue_categories" ON "issue_categories"."id" = "issues"."category_id" WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."category_id" (1.6ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, assigned_to_id AS assigned_to_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "users" ON "users"."id" = "issues"."assigned_to_id" WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."assigned_to_id" (1.0ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, author_id AS author_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" INNER JOIN "users" ON "users"."id" = "issues"."author_id" AND "users"."type" IN ('User', 'AnonymousUser') WHERE ((projects.id = 1) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."author_id" (0.9ms) SELECT COUNT(*) AS count_all, status_id AS status_id, is_closed AS is_closed, project_id AS project_id FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "issue_statuses" ON "issue_statuses"."id" = "issues"."status_id" WHERE (((projects.id = 1 OR (projects.lft > 1 AND projects.rgt < 10))) AND (projects.status <> 9 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking'))) GROUP BY "issues"."status_id", "is_closed", "issues"."project_id" Setting Load (0.2ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "ui_theme"]] Tracker Exists (0.1ms) SELECT 1 AS one FROM "trackers" INNER JOIN "projects_trackers" ON "trackers"."id" = "projects_trackers"."tracker_id" WHERE "projects_trackers"."project_id" = $1 LIMIT 1 [["project_id", 1]] Tracker Load (0.1ms) SELECT "trackers".* FROM "trackers" INNER JOIN "projects_trackers" ON "trackers"."id" = "projects_trackers"."tracker_id" WHERE "projects_trackers"."project_id" = $1 ORDER BY "trackers"."position" ASC [["project_id", 1]] Rendered reports/_simple.html.erb (86.1ms) Rendered reports/_simple.html.erb (3.8ms) Rendered reports/_simple.html.erb (2.0ms) Rendered reports/_simple.html.erb (1.6ms) Rendered reports/_simple.html.erb (4.0ms) (0.2ms) SELECT COUNT(*) FROM "projects" WHERE "projects"."parent_id" = $1 [["parent_id", 1]] (0.3ms) SELECT COUNT(*) FROM "projects" WHERE (projects.lft > 1 AND projects.rgt < 10) AND (projects.status <> 9) Project Load (0.2ms) SELECT "projects".* FROM "projects" WHERE (projects.lft > 1 AND projects.rgt < 10) AND (projects.status <> 9) ORDER BY "projects"."lft" ASC Rendered reports/_simple.html.erb (5.3ms) IssueCategory Exists (0.1ms) SELECT 1 AS one FROM "issue_categories" WHERE "issue_categories"."project_id" = $1 LIMIT 1 [["project_id", 1]] IssueCategory Load (0.1ms) SELECT "issue_categories".* FROM "issue_categories" WHERE "issue_categories"."project_id" = $1 ORDER BY issue_categories.name [["project_id", 1]] Rendered reports/_simple.html.erb (11.7ms) Rendered reports/issue_report.html.erb within layouts/base (488.6ms) Setting Load (0.4ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "app_title"]] UserPreference Load (0.1ms) SELECT "user_preferences".* FROM "user_preferences" WHERE "user_preferences"."user_id" = $1 LIMIT 1 [["user_id", 1]] Setting Load (0.2ms) SELECT "settings".* FROM "settings" WHERE "settings"."name" = $1 ORDER BY "settings"."id" DESC LIMIT 1 [["name", "gravatar_enabled"]] Project Load (0.2ms) SELECT "projects"."id", "projects"."name", "projects"."identifier", "projects"."lft", "projects"."rgt" FROM "projects" INNER JOIN "members" ON "projects"."id" = "members"."project_id" WHERE "members"."user_id" = $1 AND (projects.status<>9) AND "projects"."status" = $2 [["user_id", 1], ["status", 1]] Wiki Load (0.1ms) SELECT "wikis".* FROM "wikis" WHERE "wikis"."project_id" = $1 LIMIT 1 [["project_id", 1]] Board Exists (0.1ms) SELECT 1 AS one FROM "boards" WHERE "boards"."project_id" = $1 LIMIT 1 [["project_id", 1]] Repository Load (0.1ms) SELECT "repositories".* FROM "repositories" WHERE "repositories"."project_id" = $1 AND (is_default = 't') LIMIT 1 [["project_id", 1]] Completed 200 OK in 1460ms (Views: 697.6ms | ActiveRecord: 33.8ms)
Updated by Toshi MARUYAMA almost 9 years ago
Updated by Lars Kanis almost 9 years ago
- File test-pg-9.5.log test-pg-9.5.log added
This is interesting. Putting any of the above "SELECT COUNT(*) AS count_all..."
statements into psql, results in the "column reference "status_id" is ambiguous" error for me. This is because both projects and issues have this column, but it is table-prefixed in the GROUP BY part only, not in the SELECT part. I wonder why it works on Centos-6.
I get this error on PostgreSQL versions 8.4.22, 9.3.11 and 9.5.2.
System is Ubuntu-16.04 with ruby-2.3.0.
Attached is the log of a full redmine test suite run on PostgreSQL-9.5.2. It results in 11 errors, because of this issue. With the above patch applied, all tests run green.
Updated by Toshi MARUYAMA almost 9 years ago
Tests of trunk on Ruby 2.3 pass.
http://www.redmine.org/builds/index.html
Updated by Toshi MARUYAMA almost 9 years ago
Redmine 3.2 does not support Ruby 2.3.
But test/functional/reports_controller_test.rb passes.
$ ruby test/functional/reports_controller_test.rb /home/xxxxx/.rvm/gems/ruby-2.3.0/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: key "inodot" is duplicated and overwritten on line 466 Run options: --seed 36978 # Running: ..... Finished in 1.585129s, 3.1543 runs/s, 39.1135 assertions/s. 5 runs, 62 assertions, 0 failures, 0 errors, 0 skips $ ruby --version ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] $ hg parent --template='{svnpath}\n{svnrev}\n' /branches/3.2-stable 15358
Updated by Toshi MARUYAMA almost 9 years ago
- Tracker changed from Patch to Defect
- Status changed from Needs feedback to Closed
- Resolution set to Invalid
Lars Kanis wrote:
This is interesting. Putting any of the above
"SELECT COUNT(*) AS count_all..."
statements into psql, results in the "column reference "status_id" is ambiguous" error for me. This is because both projects and issues have this column,
"Projects" table does not have "status_id".
redmine_test=# \d projects Table "public.projects" Column | Type | Modifiers --------------------+-----------------------------+------------------------------------------------------- id | integer | not null default nextval('projects_id_seq'::regclass) name | character varying(255) | not null default ''::character varying description | text | homepage | character varying(255) | default ''::character varying is_public | boolean | not null default true parent_id | integer | created_on | timestamp without time zone | updated_on | timestamp without time zone | identifier | character varying(255) | status | integer | not null default 1 lft | integer | rgt | integer | inherit_members | boolean | not null default false default_version_id | integer | Indexes: "projects_pkey" PRIMARY KEY, btree (id) "index_projects_on_lft" btree (lft) "index_projects_on_rgt" btree (rgt)
Updated by Lars Kanis almost 9 years ago
Sorry for the noise! I did the database setup per "rake db:setup" instead of "rake db:migrate", because I thought, that db/schema.rb comes from the VCS. Setup per "rake db:migrate" fixed this issue. I'm not sure where this additional column in my db/schema.rb came from.
Thank you very much!