How to update a UDF in Redshift (amazon)? - amazon-web-services

I have created a UDF in Redshift. I can view this in the pg_proc table by
select * from pg_proc where proname ilike 'my_udf';
Now i need to update this function (including the function signature). I have tried using update statements on the pg_proc table with no luck.
EDIT: Seems the only way to update the signature is to delete the function although DROP FUNCTION <function_name> does not seems to work.
What is the correct way to do this? Also knowing the function signature would be helpful, is there any way to view that?

You should use CREATE [ OR REPLACE ] FUNCTION... to redefine the User-Defined Function (UDF).
See: CREATE FUNCTION - Amazon Redshift
If the signature is changing, you might need to DROP FUNCTION and then CREATE FUNCTION.

Related

PostgREST - How to create tables?

I want to create a new table using postgREST, but I was not able to find anything about this in the documentation. Is it possible to create tables? If yes, how?
Sorry if this questions was already asked, but unfortunately I always found solutions for postgres (without t :D)
Thx :)
you can create stored function that creates the table for you, then call that function via postgrest
something like:
create or replace function create_foo_table() returns void as
$$
begin
execute format('create table foo (id int primary key)')
end
$$ language plpgsql;
then call /rpc/create_foo_table in Postgrest
you'd need to reload Postgrest's schema cache after this, in order to read the table: https://postgrest.org/en/v7.0.0/admin.html?highlight=reload#schema-reloading
This likely has security implications, so be careful, especially if using dynamic SQL to create the table

Textfield with autocomplete

I have several fields that contain exactly the same sql query! Is it possible to place the sql question centrally in APEX in the same way as list of values or as a function in oracle? I am using APEX 18.2
Here are two extended solutions
Pipelined SQL
https://smart4solutions.nl/blog/on-apex-lovs-and-how-to-define-their-queries/
Dynamic SQL
http://stevenfeuersteinonplsql.blogspot.com/2017/01/learn-to-hate-repetition-lesson-from.html
Call me dense, but I don't think I understand why you'd have multiple fields (presumably on the same form) whose source is the same SQL query.
Are you passing a parameter to the SQL to get a different value for each field?
If you are passing a parameter to the SQL query, why not create a database view to hold the query, then pass the parameter to the view. That way, if you need to change it, it's in one place.
If they really are all the same value from the same query, how about using the SQL for one field/page_item, then make the source for the others be the first page item?
I would create a hidden item with the query in the source as text and use &HIDDEN_ITEM_NAME. to reference its value in the source of any item I was trying to display the query.
Finally isolved it with a function and use the type PL/SQL Function Body returning SQL Query in APEX, then i have all in one place. I created a function in SQL developer that returns a SQL query.

How to use a query as a parameter for a function?

I just refactored into a power query function some code that process tables that has an specific structure.
Now, I need to pass another PowerQuery query (that returns a table with a compatible structure) to this function, but the parameter manager only allows to use strings, therefore I need to obtain access to the referenced table using an string with its name.
Any hints?

flatbuffers: Using add_myTable(table) to encode data

I am trying to use the following method of building a table, as taken from the flatbuffers tutorial:
MonsterBuilder monster_builder(builder);
monster_builder.add_pos(&pos);
monster_builder.add_hp(hp);
But having done this for my root table I am unsure if I need to call .Finish() before adding it to the table that then contains the table above.
Is anyone able to provide me with an example of how usage of the add_member commands may be used in nested tables?
You call .Finish() on any tables you create with a table builder. You call .Finish(root) on your FlatBufferBuilder instance only once at the end to finish construction of the buffer.

In Redshift, how do you combine CTAS with the "if not exists" clause?

I'm having some trouble getting this table creation query to work, and I'm wondering if I'm running in to a limitation in redshift.
Here's what I want to do:
I have data that I need to move between schema, and I need to create the destination tables for the data on the fly, but only if they don't already exist.
Here are queries that I know work:
create table if not exists temp_table (id bigint);
This creates a table if it doesn't already exist, and it works just fine.
create table temp_2 as select * from temp_table where 1=2;
So that creates an empty table with the same structure as the previous one. That also works fine.
However, when I do this query:
create table if not exists temp_2 as select * from temp_table where 1=2;
Redshift chokes and says there is an error near as (for the record, I did try removing "as" and then it says there is an error near select)
I couldn't find anything in the redshift docs, and at this point I'm just guessing as to how to fix this. Is this something I just can't do in redshift?
I should mention that I absolutely can separate out the queries that selectively create the table and populate it with data, and I probably will end up doing that. I was mostly just curious if anyone could tell me what's wrong with that query.
EDIT:
I do not believe this is a duplicate. The post linked to offers a number of solutions that rely on user defined functions...redshift doesn't support UDF's. They did recently implement a python based UDF system, but my understanding is that its in beta, and we don't know how to implement it anyway.
Thanks for looking, though.
I couldn't find anything in the redshift docs, and at this point I'm
just guessing as to how to fix this. Is this something I just can't do
in redshift?
Indeed this combination of CREATE TABLE ... AS SELECT AND IF NOT EXISTS is not possible in Redshift (per documentation). Concerning PostgreSQL, it's possible since version 9.5.
On SO, this is discussed here: PostgreSQL: Create table if not exists AS . The accepted answer provides options that don't require any UDF or procedural code, so they're likely to work with Redshift too.