This question already has answers here:
Cannot access table without public.table name. Is there a way to get rid of public?
(2 answers)
Closed 7 years ago.
I'm using postgres on heroku with a node app.
I'm connecting to my database no problem and I can query all my other tables no problem
select * from org; works perfectly.
My problem is querying users which are obviously called user
select * from user seems to be returning the postgres database user name.
If I use select * from public.user I get the list of users I've created.
Is there a way of just using user?
I'm sure I've missed something simple.
USER is a reserved word in SQL Standard, thus it also is in PostgreSQL.
You should NOT use that as your table name.
Type select user to see that it will also give you the name of user that holds current conection to the database.
As to your question, there is no way of using just user as a reference to your table.
From documentation, bold emphasis mine:
SQL distinguishes between reserved and non-reserved key words. According to the standard, reserved key words are the only real key words; they are never allowed as identifiers. Non-reserved key words only have a special meaning in particular contexts and can be used as identifiers in other contexts.
Related
I have a DB with table names written in underscore format. I want to edit their names and also to be able to name every new table in a camelcase format
Still, whenever I use a query to call a camelcase table name I have to do it using double quotes. I do not want double or single quotes. Only the table name. Is it possible?
I have found a similar post describing 3 possible options about naming a table column in pgAdmin not including what I am looking for.
Also, that was 6 years ago and I am wondering if some things have changed since then, while I have not found any solution yet.
I have a question regarding Laravel's Reset Password function. I have thoroughly searched for a possible solution and could not find one. Moreover, I tried to scrutinize the code and manually implement it, but failed miserably because of the nesting. (I'm new to Laravel).
According to Laravel's documentation, the user's email must be in the table user in order to work and the error code confirms it.
*Column not found: 1054 Unknown column 'email' in 'where clause' (SQL: select * from user where email = usermail#provider.com limit 1*
However, we do have the scenario that an user might have multiple email addresses, hence stored in a different table called user_email.
Does anybody have experience with this scenario and could take the time to enlighten me on this?
You have two Options:
Write your own password recovery system.
Let the user choose a primary e-mail and make a column on the users table which represents the primary e-mail adresse.
As far as I can tell, the search filter in the navigator will only search available database names, not table names.
If you click on a table name and start typing, it appears that a simple search can be performed beginning with the first letter of the tables.
I'm looking for way to be able to search all table names in a selected database. Sometimes there can be a lot of tables to sort through. It seems like a feature that would likely be there and I can't find it.
Found out the answer...
If you type for example *.test_table or the schema name instead of the asterisk it will filter them. The key is that the schema/database must be specified in the search query. The asterisk notation works with the table names as well. For example *.*test* will filter any table in any schema with test anywhere in the table name.
You can use the command
SHOW TABLES like '%%';
To have it always in your tools, you can add it as a snippet to SQL aditions panel on the right.
Then you can always either bring it in your editor and type your search key between %%, or just execute it as it is (It will fetch all the tables of the database) and then just filter using the "filter rows" input of the result set.
I'm interested in using the following audit mechanism in an existing PostgreSQL database.
http://wiki.postgresql.org/wiki/Audit_trigger
but, would like (if possible) to make one modification. I would also like to log the primary_key's value where it could be queried later. So, I would like to add a field named something like "record_id" to the "logged_actions" table. The problem is that every table in the existing database has a different primary key fieldname. The good news is that the database has a very consistent naming convention. It's always, _id. So, if a table was named "employee", the primary key is "employee_id".
Is there anyway to do this? basically, I need something like OLD.FieldByName(x) or OLD[x] to get value out of the id field to put into the record_id field in the new audit record.
I do understand that I could just create a separate, custom trigger for each table that I want to keep track of, but it would be nice to have it be generic.
edit: I also understand that the key value does get logged in either the old/new data fields. But, what I would like would be to make querying for the history easier and more efficient. In other words,
select * from audit.logged_actions where table_name = 'xxxx' and record_id = 12345;
another edit: I'm using PostgreSQL 9.1
Thanks!
You didn't mention your version of PostgreSQL, which is very important when writing answers to questions like this.
If you're running PostgreSQL 9.0 or newer (or able to upgrade) you can use this approach as documented by Pavel:
http://okbob.blogspot.com/2009/10/dynamic-access-to-record-fields-in.html
In general, what you want is to reference a dynamically named field in a record-typed PL/PgSQL variable like 'NEW' or 'OLD'. This has historically been annoyingly hard, and is still awkward but is at least possible in 9.0.
Your other alternative - which may be simpler - is to write your audit triggers in plperlu, where dynamic field references are trivial.
In PgAdmin, is it possible to search for a value in ALL tables? In phpmyadmin this is possible and quite convenient. You search for an ID value and find all the tables in which it occurs. I can't seem to find this function in PgAdmin.
Does it exist?
It currently doesn't exist in PgAdmin.
There's custom function for this. You can use it from Query tool. See [How to search a specific value in all tables (PostgreSQL)?
](as of today, there are two modifications in answers there that include column name, progress reporting)