简体   繁体   中英

WordPress database error: column p.id does not exist | Wordpress using Postgres

I seem to have this error:

WordPress database error ERROR:  column p.id does not exist LINE 1: SELECT p.id FROM wp_posts AS p  WHERE p.post_date > '2013-01...

Coming from this block of code:

<?php
$posts=$wpdb->get_results($wpdb->prepare(
 "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = %s " .
 "ORDER BY CHAR_LENGTH(meta_value) DESC, meta_value DESC LIMIT 5",
 '_wp-svbtle-kudos'
));
?>

I'm using postgresql with wordpress. I implemented this and I am using this theme. The problem is coming from Line 78 here .

For post the database looks like this:

在此处输入图片说明

And for postmeta it looks like this:

在此处输入图片说明

Postgres is picky on caps/no caps. The wordpress I installed had ID rather than id as the column name in the database. I did a grep -r 'p/.id' * and found p.id in wp-includes/link-template.php. On line 1177 I had $query = "SELECT p.id FROM $wpdb->posts AS p $join $where $sort"; which I changed to $query = "SELECT p.ID FROM $wpdb->posts AS p $join $where $sort"; and the errors went away.

Based on the error message, I suspect that WordPress created the table like this.

create table "wp_posts" (
  "ID" int8 primary key,
  ...
);

In PostgreSQL, if you declare a column name using uppercase within double quotes, you have to access it the same way.

SELECT p."ID" FROM wp_posts p ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM